0

我有一个长格式重复测量的大型数据框(41764 个观察值)。我正在尝试总结数据框并为每个不同的个体创建一个具有单个值的新数据框(总共 3112 个观察值)。我正在使用 ddply 总结,我的特殊情况的更多背景是在新数据帧中重复测量的第一个和最后一个值之间存在差异?.

我正在使用此代码

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)))

似乎给出了我正在寻找的结果。

4

1 回答 1

1

好的,感谢 LostBrit 的帮助,我开始意识到我发出了错误的命令(或者我可能不清楚我一开始到底想做什么)。似乎这段代码给出了我想要的结果:

df2 <- ddply(df1, .(indv), summarize, 
       value1=tail(value1, 1), 
       value2=tail(value2, 1), 
       group =tail(group, 1))

感谢大家的帮助!

于 2013-07-13T17:12:26.787 回答