【发布时间】:2013-07-13 16:34:09
【问题描述】:
我有一个长格式重复测量的大型数据框(41764 个观察值)。我正在尝试总结数据框并为每个不同的个体创建一个具有单个值的新数据框(总共 3112 个观察值)。我正在使用 ddply 总结,关于我的特定案例的更多背景信息在 New dataframe with difference between first and last values of repeated measurements?。
我正在使用此代码
df2 <- ddply(df1, .(indv), summarize, df1['value1'], df1['value2'])
但是当我运行它时,我得到了这个错误
Error: cannot allocate vector of size 991.6 Mb
In addition: Warning messages:
1: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
2: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
3: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
4: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
我不确定如何解决这个问题。我已经尝试将所有驻留在内存中的数据帧保存为文件,关闭 R,然后将它们导入回 R。这似乎至少在最初节省了内存,但是在运行 ddply 汇总时我仍然用完了 RAM。
我在这台机器上有 8 GB 的 RAM,所有这些都可供 R 使用。有谁知道我可以做些什么来解决这个问题?
也许我不应该使用 ddply 总结,也许有更好的方法来做到这一点?
编辑:看来我发出的命令可能不正确。像
这样的命令df2 <- ddply(df1, .(indv), summarize, value1=(tail(value1, 1)), value2=(tail(value2, 1)), group=(tail(group, 1)))
似乎给出了我正在寻找的结果。
【问题讨论】:
-
下一步是什么?您可能不需要这样做。
-
嘿LostBrit,感谢您的评论。我最终想要做的只是计算 value1 和 value2 的平均值和 SEM,用于不同组中的个人“indv”。所以,我基本上只是想从我的数据框中获取 value1 和 value2 的最后一个实例并创建一个新的数据框。也许这样的东西更像我需要:df2
-
plyr 并不能很好地处理大量关卡。最好在基础 R 中执行此操作。
-
亲爱的洪,感谢您的评论。我从来没有在 base R 中这样做过。你能给我更多关于如何在 base R 中做到这一点的信息吗?谢谢!
-
听起来像是
aggregate()的工作,但没有数据很难尝试任何东西。我在想aggregate(cbind("value1.mean" = value1, "value2.mean" = value2)~indv,df1, mean)可能会有所帮助。
标签: r