2016-10-25 2 views
0

에서 I 테이블 사용자 순서와 위치 정보로 구성되어있다 dplyr 이용한 테이블의 총 거리를 요약한다 : X 및 Y계산 R

I가 사용자에 의해 그룹을 좋아하고,에 기초하여 총 거리를 계산하는 것을 서열

:

> d <- function(n1,n2){ 
+ d <- sqrt((df$y[n2]-df$y[n1])^2+(df$x[n2]-df$x[n1])^2) 
+ return(d) 
+ } 
,536 : 여기

> df <- data.frame(user_id=rep(1,3), seq=1:3, x=c(1,5,3), y=c(2,3,9)) 
> df 
    user_id seq x y 
1  1 1 1 2 
2  1 2 5 3 
3  1 3 3 9 

두 지점 (유클리드) 사이의 거리를 계산하는 함수

이 같은 총 거리를 좀하고 싶습니다 :

나는 "GROUP_BY"dplyr 사용할 수 있습니다 및 모든 사용자에 대해 순서에 총 거리를 기준으로 얼마나
> df <- data.frame(user_id=1, dtot=d(1,2)+d(2,3)) 
> df 
    user_id dtot 
1  1 10.45 

? 당신이 원하는 것을 달성하기

+0

내 거리 함수는 두 개의 엔트리를 수신한다 :

이어서 summarise 함수 group_byuser_id로 이것을 사용. 어떤 두 점에서 계산해야합니까? 시퀀스는 궤적을 따라 점을 나타 냅니까? – Omri374

답변

1

한 가지 방법은 총 거리를 계산하는 함수를 정의하는 것입니다 :이 함수

library(dplyr) 
total.dist <- function(x,y) { 
    sum(sqrt((x-lag(x))^2+(y-lag(y))^2),na.rm=TRUE) 
} 

입력은 열 벡터 xy 있습니다. 이 열의 lag을 빼서 벡터화 된 방식으로 각 행 사이의 거리를 계산합니다. 그러면 총 거리는 계산 된 모든 거리의 sum이며 NA 초를 제거합니다.

res <- df %>% group_by(user_id) %>% summarise(dtot=total.dist(x,y)) 
### A tibble: 1 x 2 
## user_id  dtot 
## <dbl> <dbl> 
##1  1 10.44766