2016-12-21 7 views
0

데이터 프레임에 저장된 데이터로 계산을해야합니다. 결과를이 데이터 프레임의 새로운 열에 넣습니다.R에서 데이터 프레임의 새 열에 새 값을 추가하는 방법은 무엇입니까?

초기 dataframe :

library(geosphere) 
    > mydf$distance <- with(mydf, distGeo(c(mydf$LONGITUDE,mydf$LATITUDE),c(mydf$LONGITUDE,mydf$LATITUDE))) 
    Error in .pointsToMatrix(p1) : Wrong length for a vector, should be 2 
:

> str(mydf) 
    'data.frame': 1122 obs. of 6 variables: 
    $ MMSI  : num 2.73e+08 2.73e+08 2.73e+08 2.73e+08 2.73e+08 ... 
    $ MMSI.1  : num 2.73e+08 2.72e+08 2.72e+08 2.72e+08 6.67e+08 ... 
    $ LATITUDE : num 46.9 46.9 46.9 46.9 46.9 ... 
    $ LONGITUDE : num 32 32 32 32 32 ... 
    $ LATITUDE.1 : num 46.9 46.9 46.9 46.9 46.9 ... 
    $ LONGITUDE.1: num 32 32 32 32 32 ... 

가 지금은

다음 코드를 실행 ... 현재 원시의 데이터 조작의 결과를 포함하는 새 열을 추가 할 필요가

저는 distGeo 함수의 데이터 구조가 다름을 이해합니다. 이 오류를 수정하는 방법 또는 새 열의 점 사이의 거리를 얻기 위해 코드를 변경하는 방법은 무엇입니까?

+0

하십시오이'데이터의 일부를 dput' 매트릭스를 받아들이으로이

apply(mydf, 1, function(x) distGeo(x[c("LONGITUDE","LATITUDE")],x[c("LONGITUDE.1","LATITUDE.1")])) 

또는 단지가 작동하려면 특정 데이터 열을 전달하려고 – Christoph

+0

각 전에'mydf을 $'포함 할 필요가 없습니다 'with'을 사용하여 데이터 프레임을 참조 했으므로 열 이름. 또한 단일 점 사이의 거리를 계산하는 중 오류가있는 것으로 보입니다. – manotheshark

+0

'연산자'사용에 대한 의견을 보내 주셔서 감사합니다. 오류는 하나의 점 사이의 거리를 계산하는 것이 아닙니다. – twistfire

답변

1

데이터를 보지 않고도 단일 점 사이의 거리를 계산하려는 것처럼 보입니다. 두 번째 포인트는 가능성의 이름 열의 끝에서 .1 포함해야

library(geosphere) 
mydf$distance <- with(mydf, distGeo(c(LONGITUDE, LATITUDE), c(LONGITUDE.1, LATITUDE.1))) 

그것은 오류처럼 보이는 당신이 개별적으로 각 행 대신 전체 데이터 프레임을 전달하는 것입니다 업데이트합니다. 이

distGeo(mydf[,c("LONGITUDE", "LATITUDE")], mydf[,c("LONGITUDE.1", "LATITUDE.1")]) 
+0

아니, 문제는 여기에 없습니다 .. 문제는 distGeo에 필요한 데이터가 다른 형식이어야한다는 것입니다 ... 그러나 나는 그것을 변경하는 방법을 모르겠습니다. – twistfire

+0

p1, p2 매개 변수 : 경도/위도 (s). 두 숫자의 벡터, 2 열의 행렬 (첫 번째 열은 경도, 두 번째 열은 위도) 또는 Spatial-Points * 객체가 될 수 있습니다. – twistfire

+0

@twistfire는 행을 기준으로 벡터를 전달하는 데 '적용'을 사용하고 필터를 사용하는 예제를 추가했습니다. 값을 행렬로 전달하는'data.frame'. – manotheshark

관련 문제