Сравнить два фрейма данных и заменить наиболее подходящее значение в один фрейм данных

#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