#r
#r
Вопрос:
У меня есть два фрейма данных.
node <- c("A","A","A","A","A", "B","B")
activity <- c("abc","cdf","ghi","abc","nop", "pqr","tuv")
time <- c(7.30,6.30,8.00,9.50,7.45, 10.00, 7.55)
df1 <- data.frame(node,activity,time)
node <- c("A","A","A","A", "B")
activity <- c("cdf","abc","nop","ghi", "tuv")
nextactivity <- c("abc","nop","ghi","abc", "pqr")
df2 <- data.frame(node,activity,nextactivity)
Я хочу сравнить активность df2, nextactivity и заменить столбец времени из df1
желаемый вывод, подобный этому
node <- c("A","A","A","A", "B")
activity <- c("cdf","abc","nop","ghi", "tuv")
t1 <- c(6.30,7.30,7.45,8.00,7.55)
nextactivity <- c("abc","nop","ghi","abc", "pqr")
t2 <- c(7.30,7.45,8.00,9.50,10.00)
df3 <- data.frame(node,activity,t1,nextactivity,t2)
Ответ №1:
Работает ли это:
library(dplyr)
library(tidyr)
df1 %>% arrange(node, time) %>% group_by(node) %>%
summarise(t1 = time[1:(n()-1)], t2 = time[2:n()], activity1 = activity[1:(n()-1)], activity2 = activity[2:n()]) %>%
select(node, 'activity' = activity1, t1, 'nextactivity' = activity2, t2)
`summarise()` regrouping output by 'node' (override with `.groups` argument)
# A tibble: 5 x 5
# Groups: node [2]
node activity t1 nextactivity t2
<chr> <chr> <dbl> <chr> <dbl>
1 A cdf 6.3 abc 7.3
2 A abc 7.3 nop 7.45
3 A nop 7.45 ghi 8
4 A ghi 8 abc 9.5
5 B tuv 7.55 pqr 10