总结R中数据框中的分组记录(...再次)

mon*_*962 2 statistics select r dataframe

(我今天早些时候试着提出这个问题,但后来发现我过分简化了问题;我收到的答案是正确的,但由于我在原问题中对问题的过度简化,我无法使用它们.这是我的第二次尝试...)

我在R中有一个数据框,如下所示:

"Timestamp", "Source", "Target", "Length", "Content"
0.1        , P1      , P2      , 5       , "ABCDE"
0.2        , P1      , P2      , 3       , "HIJ"
0.4        , P1      , P2      , 4       , "PQRS"
0.5        , P2      , P1      , 2       , "ZY"
0.9        , P2      , P1      , 4       , "SRQP"
1.1        , P1      , P2      , 1       , "B"
1.6        , P1      , P2      , 3       , "DEF"
2.0        , P2      , P1      , 3       , "IJK"
...
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

"StartTime", "EndTime", "Duration", "Source", "Target", "Length", "Content"
0.1        , 0.4      , 0.3       , P1      , P2      , 12      , "ABCDEHIJPQRS"
0.5        , 0.9      , 0.4       , P2      , P1      , 6       , "ZYSRQP"
1.1        , 1.6      , 0.5       , P1      , P2      , 4       , "BDEF"
...
Run Code Online (Sandbox Code Playgroud)

试着把它放到英文中,我想把连续的记录分成相同的'Source'和'Target',然后打印出每个组的一条记录,显示该组的StartTime,EndTime和Duration(= EndTime-StartTime),以及该组的长度总和,以及该组中内容(将全部为字符串)的串联.

TimeOffset值将始终在整个数据帧中增加.

我看了一下熔化/重铸,感觉它可以用来解决问题,但是无法理解我的文档.我怀疑在R中可以做到这一点,但我真的不知道从哪里开始.在紧要关头,我可以导出数据帧,并在例如Python中进行,但如果可能的话,我宁愿留在R中.

提前感谢您提供的任何帮助

had*_*ley 7

这是使用plyr的另一个解决方案:

id <- with(df1, paste(Source, Target))
df1$group <- cumsum(c(TRUE, id[-1] != id[-length(id)]))

library(plyr)
ddply(df1, c("group"), summarise, 
  start = min(Timestamp),
  end = max(Timestamp),
  content = paste(Content, collapse = ", ")
)
Run Code Online (Sandbox Code Playgroud)