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中.
提前感谢您提供的任何帮助
这是使用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)
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |