【发布时间】:2019-01-09 12:33:52
【问题描述】:
我有一个数据集,我在其中观察某些人的变量,而不是其他人。对于那些我观察变量的人,我只观察一次。但是,每个个体的观察次数以及观察值的位置会有所不同。
如果有非 NA 值,我想用非 NA 值填充给定个体的所有 NA 值。否则,NA 应该保持 NA。
这是一个示例数据集:
#data.frame of 100 individuals with 10 observations each
data <- data.frame(group = rep(1:100,each=10),value = NA)
#first 50 individuals get a value at the fifth observation, others don't have value
data$value[seq(5,500,10)] <- rnorm(50)
到目前为止一切顺利,不是什么大问题。取自另一个线程,我们可以使用dplyr 和tidyr 做这样的事情:
data <- data %>%
group_by(group) %>% #by group
fill(value) %>% #default direction down
fill(value, .direction = "up") #also fill NAs upwards
这很好地解决了这个问题。但是,我必须为大约 80mio 执行此操作。观察,这需要几个小时。有更快的方法吗?我认为data.table 可能是一个不错的候选人。
如果可以调整该方法以仅填充出现在值之前的 NA,那就太好了。
谢谢!
【问题讨论】:
标签: r performance na