我有以下示例数据表
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,但是我需要将替换按一个因素分组,这使得它变得复杂。有没有办法在不使用循环的情况下执行此操作?谢谢!
答案 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))