我想在我的面板数据集中添加缺少的观察结果,但仍然遇到内存问题。
我使用以下代码(基于this主题):
library(dplyr)
group_by(df, group) %>%
complete(time = full_seq(time 1L)) %>%
mutate_each(funs(replace(., which(is.na(.)), 0)), -group, -time)
我的数据看起来与该主题中的数据类似,因此:
group time value
1 1 50
1 3 52
1 4 10
2 1 4
2 4 84
2 5 2
我希望看起来像
group time value
1 1 50
1 2 0
1 3 52
1 4 10
2 1 4
2 2 0
2 3 0
2 4 84
2 5 2
问题是我的内存不足(它只有一个1 GB的文件,大约有150万个观察点)。关于如何做到这一点的任何建议?
答案 0 :(得分:1)
如果内存有问题,您可以尝试使用 data.table -package:
选项1:
# convert to a data.table
setDT(df)
# create a reference table
new.df <- df[, .(time = min(time):max(time)), group]
# join and replace the NA-values with zero's
new.df[df, value := i.value, on = names(new.df)][is.na(value), value := 0]
给出:
> new.df
group time value
1: 1 1 50
2: 1 2 0
3: 1 3 52
4: 1 4 10
5: 2 1 4
6: 2 2 0
7: 2 3 0
8: 2 4 84
9: 2 5 2
选项2:
setDT(df, key='time')[, .SD[J(min(time):max(time))], by = group
][is.na(value), value := 0][]
给出:
group time value
1: 1 1 50
2: 1 2 0
3: 1 3 52
4: 1 4 10
5: 2 1 4
6: 2 2 0
7: 2 3 0
8: 2 4 84
9: 2 5 2