如何在同一data.frame的不同部分上运行循环

时间:2015-11-04 15:14:02

标签: r for-loop dataframe

假设我有一个包含2个变量的数据框,我试图在其上运行一些基本的摘要统计数据。我想运行一个循环来给出每个唯一值数的最小和最大秒值之间的差异。我的实际数据框架非常庞大,包含许多“数字”数字的值。所以单独进行子集化和运行并不是一个现实的选择。数据如下所示:

head

我的当前代码仅返回整个数据框架的最小和最大秒数之间的差值:

df <- data.frame(number=c(1,1,1,2,2,2,2,3,3,4,4,4,4,4,4,5,5,5,5),
                 seconds=c(1,4,8,1,5,11,23,1,8,1,9,11,24,44,112,1,34,55,109)) 
     number seconds
1       1       1
2       1       4
3       1       8
4       2       1
5       2       5
6       2      11
7       2      23
8       3       1
9       3       8
10      4       1
11      4       9
12      4      11
13      4      24
14      4      44
15      4     112
16      5       1
17      5      34
18      5      55
19      5     109

1 个答案:

答案 0 :(得分:3)

因为你有很多数据性能,所以你应该使用data.table而不是data.frame:

library(data.table)
dt <- as.data.table(df)
dt[, .(spread = (max(seconds) - min(seconds))), by=.(number)]

   number spread
1:      1      7
2:      2     22
3:      3      7
4:      4    111
5:      5    108