我需要使用R中的中位数或模式值,用2-3个组填充数据帧中的每个NAs。
实际上,我试图将NA归入数值变量的group by mode和因子变量的group by模式。
我搜索了这个网站,但找不到任何合适的建议来帮助我。
一些答案建议归因于整个NA,或者一次只归因于一个变量。我的数据框有40多列。
如果有人能清楚地解决这个问题,我将非常感激。
这是我的粗略代码,但它不起作用。
fillna_cols <- c(d,e,f,g,h...)
df %>%
group_by(a,b,c) %>%
mutate_at(fillna_cols, na.aggregate(df,FUN = median))发布于 2020-03-05 10:13:58
编造一些数据
mtcars[ c(4,5,9) , "wt" ] <- NA瞧一瞧
head( mtcars)用均值覆盖未命中
mtcars[ is.na( mtcars$wt) , "wt"] <- mean( mtcars$wt , na.rm=T)或一个组的中位数
mtcars[ is.na( mtcars$wt) &mtcars$am %in%0 , "wt"] <- quantile( mtcars[ mtcars$am%in%0 , "wt"] , .5, na.rm=T)
mtcars[ is.na( mtcars$wt) &mtcars$am %in%1 , "wt"] <- quantile( mtcars[ mtcars$am%in%1 , "wt"] , .5, na.rm=T)或数据表解决方案
library( data.table)
mtcars <- data.table( mtcars)
#median within cyl/am cells
mtcars[ , median := quantile( wt , .5 , na.rm=T) , by= .(cyl, am)]
mtcars[ , impwt := ifelse( is.na( wt) , median , wt) ]https://stackoverflow.com/questions/60537279
复制相似问题