我有一个非常大的数据框,其中一些值与一个因子相关联,如下所示:
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分钟)。 有更聪明的方法吗? 感谢。
答案 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)