差异化数据框的子列表

时间:2011-12-02 20:03:25

标签: r

我有一个数据框,其中包含时间轴中出现的几个交错值。我想创建一个新的数据框,其中包含行号(基本上是行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")

1 个答案:

答案 0 :(得分:3)

使用plyr剪切数据框并转换为附加新矢量。

library(plyr)
ddply(dtf, .(fd), function(x) transform(x, diff = c(x$size[1], diff(x$size))))