的NA

2017-06-05 68 views
1

我有下面的示例數據表的NA

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))) 

插入幾的NA

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

我們可以通過 '區間'

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

解決方案分組後使用dplyr

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

據透露使用na.aggregatezoo用的 '階梯' 的mean來代替 'NA',你可以做一些像'replace(steps,is.na(steps),mean(steps,na.rm = TRUE))'而不是。 – Frank

+0

@Frank,但他需要按'間隔'進行分組。一個簡單的替換替換NA的步驟總體意思是 –

+0

當然,我的意思是你可以使用這個而不是'ifelse'部分(保留group_by)。 'ifelse'函數通常有一些怪癖和速度問題,當目標是取代某些值時,似乎並不是最自然的選擇。 – Frank