R 中缺少时间值 - 内存问题
Missing time values in R - memory issues
我想在我的面板数据集中添加缺失的观察结果,但 运行 存在内存问题。
我使用以下代码(基于 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 万个观察值)。关于如何以不同方式执行此操作的任何建议?
如果内存有问题,您可以尝试使用 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
我想在我的面板数据集中添加缺失的观察结果,但 运行 存在内存问题。
我使用以下代码(基于 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 万个观察值)。关于如何以不同方式执行此操作的任何建议?
如果内存有问题,您可以尝试使用 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