У меня есть data.frame, который содержит последовательные образцы и (X, Y) координаты разных людей в разных местах.Ошибка при построении кода dplyr
df <- data.frame(Name = rep(c("Client A","Client B", "Client C"),3),
Sample = rep(c(1,2,3), each=3),
Location = rep(c("City","Country","Suburban"),3),
X = c(4.35, 4.36, 4.42, -5.70, -5.70, -5.75, 3.60, 3.59, 3.57),
Y = c(-15.43, -15.44, -16.31, -19.67, -19.67, -15.18, -20.49, -18.95, -18.97))
Я хочу рассчитать их пройденное расстояние от одного образца до следующего в каждом месте. Это должно быть организовано каждым именем, образцом и местоположением. Я построил следующий код, используя dplyr
.
require(dplyr)
DistanceOutput <- df %>%
arrange(Name,Sample,Location) %>%
group_by(Name,Sample,Location) %>%
mutate(lagX = lag(X), lagY = lag(Y)) %>%
rowwise() %>%
mutate(Distance =
dist(matrix(c(X,Y,lagX,lagY),nrow=2,byrow=TRUE))
) %>%
select(-lagX, -lagY)
Это устраивает мой выход именно так, как я после, но только содержит столбец Distance полный NA
, как показано ниже. Я ожидаю, что первая строка (Name и Location) будет содержать NA для расстояния, но не следующие два образца.
> ddply(DistanceOutput,.(Name, Sample),function(x) head(x,2))
Name Sample Location X Y Distance
1 Client A 1 City 4.35 -15.43 NA
2 Client A 2 City -5.70 -19.67 NA
3 Client A 3 City 3.60 -20.49 NA
4 Client B 1 Country 4.36 -15.44 NA
5 Client B 2 Country -5.70 -19.67 NA
6 Client B 3 Country 3.59 -18.95 NA
7 Client C 1 Suburban 4.42 -16.31 NA
8 Client C 2 Suburban -5.75 -15.18 NA
9 Client C 3 Suburban 3.57 -18.97 NA
Если я вновь организовать group_by
линию, я в конечном итоге с другим форматом Name/Sample/Location, чем выше. Где я ошибаюсь в моем коде выше?
R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.5 (Yosemite)