使用按因子分组的相同列的方式替换data.table列中的NAs

时间:2017-06-05 12:31:10

标签: r data.table

我有以下示例数据表

steps.dt = data.table(steps=rep(0:2, each=3), 
date=as.factor(rep(c("10/2/2012", "10/3/2012", "10/4/2012"), each = 3)), interval = as.factor(rep(c(0,5,10), each = 3)))

插入一些NAs

steps.dt[c(2,5,8),"steps"]=NA

表现在看起来像这样

   steps      date interval
1:     0 10/2/2012        0
2:    NA 10/2/2012        0
3:     0 10/2/2012        0
4:     1 10/3/2012        5
5:    NA 10/3/2012        5
6:     1 10/3/2012        5
7:     2 10/4/2012       10
8:    NA 10/4/2012       10
9:     2 10/4/2012       10

现在,我正在尝试使用按“间隔”因子分组的步骤替换“步骤”列中的NA

我已经查看了SO上的一些帖子,例如this,但是我需要将替换按一个因素分组,这使得它变得复杂。有没有办法在不使用循环的情况下执行此操作?谢谢!

2 个答案:

答案 0 :(得分:0)

我们可以使用na.aggregate中的zoo将“NA”替换为“间隔”分组后“步骤”的mean

library(zoo)
steps.dt[, steps := na.aggregate(steps), interval]

答案 1 :(得分:0)

使用dplyr的解决方案

library(dplyr)
steps.dt = steps.dt %>% group_by(interval) %>% 
                        mutate(steps = ifelse(is.na(steps),mean(steps,na.rm = T),steps))