计算非收费算法在大数据帧中找到变量的最小值和最大值?

时间:2015-01-29 16:54:43

标签: r max min

我有一个非常大的数据框,其中一些值与一个因子相关联,如下所示:

value      user
12         USER1
4          USER5
6          USER3
50         USER1
2          USER2
1          USER1
8          USER5
9          USER3
55         USER1
15         USER2

我想找出每个用户的最大值和最小值。我尝试使用for循环,在那里我创建一个临时变量并在那里找到max和min,通过用户列表。但是,数据库的大小非常大(100Mb),需要很长时间(30分钟)。 有更聪明的方法吗? 感谢。

2 个答案:

答案 0 :(得分:4)

如果df是原来的data.frame,那么"大"数据建议使用data.table包:

library(data.table)

dt = data.table(df)
setkey(dt, user)

dt[,list(min(value), max(value)),by=user]
    user V1 V2
1: USER1  1 55
2: USER5  4  8
3: USER3  6  9
4: USER2  2 15

修改:从each使用plyr的好例子!

> library(plyr)
> dt[,as.list(each(min,max)(value)),by=user]
    user min max
1: USER1   1  55
2: USER5   4   8
3: USER3   6   9
4: USER2   2  15

答案 1 :(得分:2)

仅使用基础R:

lapply(split(df$value, df$user), range)