我有一个长格式的重复测量的大型数据框架(41764个观察值)。我正在尝试总结数据帧,并为每个不同的个体创建一个新的数据帧(总共有3112个观察值)。我正在使用ddply summarize,有关我的特定案例的更多背景信息,请访问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 summarize时,我仍然耗尽了RAM。
我在这台机器上有8 gb的RAM,所有这些都可以供R使用。有人知道我可以做些什么来解决这个问题吗?
也许我不应该使用ddply summarize,也许有更好的方法可以做到这一点?
编辑:看起来我可能发出了错误的命令。像这样的命令
df2 <- ddply(df1, .(indv), summarize, value1=(tail(value1, 1)), value2=(tail(value2, 1)), group=(tail(group, 1)))似乎给出了我想要的结果。
发布于 2013-07-14 01:12:27
好的,多亏了LostBrit的帮助,我开始意识到我发出了错误的命令(或者我可能不清楚我首先想要做什么)。看起来这段代码给出了我想要的结果:
df2 <- ddply(df1, .(indv), summarize,
value1=tail(value1, 1),
value2=tail(value2, 1),
group =tail(group, 1))感谢大家的帮助!
https://stackoverflow.com/questions/17632100
复制相似问题