【问题标题】:Replacement of missing values by median for all variables in R [duplicate]用R中所有变量的中位数替换缺失值[重复]
【发布时间】:2018-05-20 16:47:59
【问题描述】:

我必须用所有变量的中位数替换缺失值。 我知道如何分别对每个变量执行此操作。

df$x1=ifelse(is.na(df$x1),median(df$x1,na.rm=T),df$x1)

但我有 21 个变量,必须对 x1-x20 中的 20 个变量执行替换。 如何一次替换 20 个变量的缺失值? 我不想创建 20 个字符串。

【问题讨论】:

  • 除非您发布示例数据,否则无法准确说明,但您可能会将其收集成长形数据,按某个变量分组,然后执行一次此操作。

标签: r dataframe dplyr


【解决方案1】:

您可以使用dplyr::mutate_at 将该列的缺失值替换为medianmutate_at 提供了选择以X 开头的列的灵活性(使用start_with),将对其应用规则。

library(dplyr)

df %>% mutate_at(vars(starts_with("X")), funs(ifelse(is.na(.),median(., na.rm = TRUE),.)))

#    ID X1   X2
# 1   a  1 21.0
# 2   b  2 22.0
# 3   c  7 23.0  << X1 was missing
# 4   d  7 24.0  << X1 was missing
# 5   e  7 25.0  << X1 was missing
# 6   f  6 26.0
# 7   g  7 24.5  << X2 was missing
# 8   h  8 24.5  << X2 was missing
# 9   i  9 29.0
# 10  j 10 30.0

样本数据:

df <- data.frame(ID=letters[1:10], X1 = 1:10, X2 = 21:30)
df$X1[3:5] <- NA
df$X2[7:8] <- NA

df
#    ID X1 X2
# 1   a  1 21
# 2   b  2 22
# 3   c NA 23
# 4   d NA 24
# 5   e NA 25
# 6   f  6 26
# 7   g  7 NA
# 8   h  8 NA
# 9   i  9 29
# 10  j 10 30

【讨论】:

  • MKR,如果我的最后一个变量是文本怎么办?这段代码会起作用吗?
  • @San.O 您可以将附加条件添加为ifelse(is.na(.) &amp; is.numeric(.) ,median(., na.rm = TRUE),.))。我还没有测试过,但应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2013-12-30
  • 2014-10-04
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多