R - 内存问题中缺少时间值

时间:2016-03-21 21:03:39

标签: r memory out-of-memory time-series dplyr

我想在我的面板数据集中添加缺少的观察结果,但仍然遇到内存问题。

我使用以下代码(基于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万个观察点)。关于如何做到这一点的任何建议?

1 个答案:

答案 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