首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中按中位数或模式填充多组NA

如何在R中按中位数或模式填充多组NA
EN

Stack Overflow用户
提问于 2020-03-05 10:10:28
回答 1查看 155关注 0票数 0

我需要使用R中的中位数或模式值,用2-3个组填充数据帧中的每个NAs。

实际上,我试图将NA归入数值变量的group by mode和因子变量的group by模式。

我搜索了这个网站,但找不到任何合适的建议来帮助我。

一些答案建议归因于整个NA,或者一次只归因于一个变量。我的数据框有40多列。

如果有人能清楚地解决这个问题,我将非常感激。

这是我的粗略代码,但它不起作用。

代码语言:javascript
复制
fillna_cols <- c(d,e,f,g,h...)

df %>% 
  group_by(a,b,c) %>% 
  mutate_at(fillna_cols, na.aggregate(df,FUN = median))
EN

回答 1

Stack Overflow用户

发布于 2020-03-05 10:13:58

编造一些数据

代码语言:javascript
复制
mtcars[ c(4,5,9) , "wt" ] <- NA

瞧一瞧

代码语言:javascript
复制
head( mtcars)

用均值覆盖未命中

代码语言:javascript
复制
mtcars[ is.na( mtcars$wt) , "wt"] <- mean( mtcars$wt , na.rm=T)

或一个组的中位数

代码语言:javascript
复制
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)

或数据表解决方案

代码语言:javascript
复制
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) ]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60537279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档