我有一个数据框,其中包含时间轴中出现的几个交错值。我想创建一个新的数据框,其中包含行号(基本上是行ID),文件描述符,操作和“大小”值。
示例:
line fd syscall size
1 1 1 lseek 1289020416
2 2 1 lseek 1289021440
3 3 2 lseek 1289024512
4 4 1 lseek 1289025536
5 5 2 lseek 1289026560
6 6 1 lseek 1289027584
我想计算大小值 per fd 的差异,并显示差异的起点。 diff
函数本身会丢弃大量数据。是否有类似的东西可以帮助我获得背景(例如,每行的开头是什么)?
我希望结果如下所示,我知道自上一行以来每个fd移动了多远,以及上一行是什么。
line fd diff
1 1 1 1024
2 2 1 4096
3 3 2 2048
4 4 1 2048
我能做些什么比将它们分开并循环更容易吗?我必须相信有人会稍微好一点diff
。
示例输入:
structure(list(line = 1:6, fd = c(1, 1, 2, 1, 2, 1), syscall = structure(c(1L,
1L, 1L, 1L, 1L, 1L), class = "factor", .Label = "lseek"), size = c(1289020416,
1289021440, 1289024512, 1289025536, 1289026560, 1289027584)), .Names = c("line",
"fd", "syscall", "size"), row.names = c(NA, -6L), class = "data.frame")
答案 0 :(得分:3)
使用plyr剪切数据框并转换为附加新矢量。
library(plyr)
ddply(dtf, .(fd), function(x) transform(x, diff = c(x$size[1], diff(x$size))))