Я пытаюсь вычислить разницу во времени между двумя временными метками в двух соседних строках с помощью пакета dplyr. Вот код:difftime между строками с использованием dplyr
tidy_ex <- function() {
library(dplyr)
#construct example data
data <- data.frame(code = c(10888, 10888, 10888, 10888, 10888, 10888,
10889, 10889, 10889, 10889, 10889, 10889,
10890, 10890, 10890),
station = c("F1", "F3", "F4", "F5", "L5", "L7", "F1",
"F3", "F4", "L5", "L6", "L7", "F1", "F3", "F5"),
timestamp = c(1365895151, 1365969188, 1366105495,
1367433149, 1368005216, 1368011698,
1366244224, 1366414926, 1367513240,
1367790556, 1367946420, 1367923973,
1365896546, 1365907968, 1366144207))
# reformat timestamp as POSIXct
data$timestamp <- as.POSIXct(data$timestamp,origin = "1970-01-01")
#create tbl_df
data2 <- tbl_df(data)
#group by code and calculate time differences between two rows in timestamp column
data2 <- data2 %>%
group_by(code) %>%
mutate(diff = c(difftime(tail(timestamp, -1), head(timestamp, -1))))
data2
}
Код выдает сообщение об ошибке:
Error: incompatible size (5), expecting 6 (the group size) or 1
Я предполагаю, что это потому, что разница в последнюю строку производит Ч (так как нет никакого дальнейшего смежного ряда). Однако метод difftime/head-tails работает с пакетом plyr вместо dplyr (see this StackOverflow post)
Как я могу заставить его работать с помощью dplyr?
Вы можете использовать 'лаг () 'вместо diff, вероятно. Если вы используете 'lag()', число строк равно N, а не N-1. – jazzurro
'diff' будет иметь длину N-1 try' mutate (diff = c (0, difftime (tail (timestamp, -1), head (timestamp, -1)))) ' – Victorp