Упорядочить действие фрейма данных — следующее действие по времени

#r

#r

Вопрос:

У меня есть такой фрейм данных

 node <- c("ABC_Amod_wdm-1/1/10/1","ABC_Amod_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1","ABC_Arvali_wdm-1/1/10/1")
activity <- c("LOSS_OF_MULTIPLEX_SECTION-OMS_A","LOSS_OF_MULTIPLEX_SECTION-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","LOSS_OF_SIGNAL-OTS","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","LOSS_OF_MULTIPLEX_SECTION-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A")
time <- c("2020-05-09 04:50:42","2020-05-09 06:16:54","2020-05-09 09:30:49","2020-05-09 13:33:20","2020-05-10 20:01:10","2020-05-10 20:01:11","2020-05-10 20:35:24","2020-05-11 16:33:31","2020-05-16 13:40:29","2020-05-16 14:39:00","2020-05-16 15:12:52","2020-05-18 17:12:57")

df <- data.frame(node, activity, time)
df
  

Я попробовал этот код

 library(dplyr)

x<-df %>%
  arrange(node, activity) %>%
  group_by(node) %>%
  mutate(nextactivity = lead(activity)) %>%
  ungroup %>%
  dplyr::select(-time) %>%
  na.omit()
  

но это не дает мне желаемого результата. все еще остаются n узлов, мне нужно n-1 узлов.

Комментарии:

1. Что именно у вас не работает? Когда я пытаюсь ответить на ваши новые данные, кажется, это работает. Можете ли вы показать, какой результат вы получаете и какой результат вы ожидаете?

2. да, он работает на R. но не на R cloud. ожидаемый результат — это когда мы запускаем этот код на выходе R

3. Вы назначили результат обратно объекту? df <- df %>% arrange(node, time) %>% group_by(node)......

4. ДА. но результат тот же

5. Возможно, это специфическая проблема R-cloud. Это работает для меня, как и ожидалось, в RStudio. Я надеюсь, что вы везде использовали dplyr::group_by и dplyr::mutate в коде.

Ответ №1:

Вы можете сохранить time данные в числовом формате arrange и удалить NA строки.

 library(dplyr)

df %>%
  arrange(node, time) %>%
  group_by(node) %>%
  mutate(nextactivity = lead(activity)) %>%
  ungroup %>%
  dplyr::select(-time) %>%
  na.omit()

# node  activity nextactivity
#  <chr> <chr>    <chr>       
#1 A     cdf      abc         
#2 A     abc      nop         
#3 A     nop      ghi         
#4 A     ghi      jkm         
#5 B     tuv      pqr         
  

Комментарии:

1. когда я запускаю этот код для исходного набора данных, он по-прежнему не группировался. итак, есть ли у вас какие-либо предложения по части group_by (node)

2. Возможно plyr , вы загрузились. Попробуйте использовать функции с именами пакетов. dplyr::group_by и dplyr::mutate .

3. Он все еще не работает. У меня есть добавить его вопрос комментарий часть

4. Работает ли это с образцами данных, которые вы указали в своем вопросе?

5. Нет, я отредактировал свой вопрос. по моему исходному набору данных. можете ли вы это проверить.