【问题标题】:I wan to replace NA values with median of a column which are of numeric type in Rstudio我想用 Rstudio 中数字类型的列的中位数替换 NA 值
【发布时间】:2021-04-13 09:13:32
【问题描述】:

这是我所做的,但是通过这个解决方案,我有了新的数据框,它只有数字列,但我想保留我的原始数据框。

data_without_na <- select_if(new_data,is.numeric)
data_without_na[] <- lapply(
  data_without_na,
  function(data_without_na) {
    data_without_na[is.na(data_without_na)] <- median(data_without_na, na.rm = TRUE)
    data_without_na
}) 

这就是我的代码,但我更愿意对原始数据框执行相同的操作。这个想法是获取数字数据类型的列的索引ind &lt;- which(sapply(new_data, is.numeric)) 并获取列号以对我的原始数据框执行操作,但这给了我一个错误

【问题讨论】:

  • data_without_na

标签: r


【解决方案1】:

模拟一个数据框:

d <- data.frame("char1" = sample(letters,100, replace = T),
                "char2" = sample(letters,100, replace = T),
                "numeric1" = sample(c(NA,seq(1,50,2.5)),100, replace = T),
                "numeric2" = sample(c(NA,seq(1,50,2.5)),100, replace = T))
d %>% 
  mutate_if(is.numeric, ~ifelse(is.na(.x),median(.x, na.rm = T),.x))

我们采用这个数据框并对所有数字列进行变异。 “~”定义了一个匿名函数,“.x”代表变量/列。

【讨论】:

  • 我试过了,但是没有用。 for(i in 1:21){ new_data %>% mutate_if(is.numeric(new_data[i]), ifelse(is.na(new_data[i]), 中值(new_data[i], na.rm = T) ,new_data[i])) }给我一个错误.p is invalid.
  • for(i in 1:21){ new_data %>% mutate_if(new_data[i],is.numeric) %>% new_data[is.na(new_data[,i]), i]
  • 日期 最低温度 最高温度 降雨量 (mm) 最大阵风方向 最大阵风速度 (km/h) 最大阵风时间 9am 温度 9am 相对湿度 (%) 9am 云量 (oktas ) 01-06-19 -0.7 15.2 0.2 S 30 13:23 4 99 02-06-19 -1.6 15.7 0 NNW 30 14:08 4.2 90 03-06-19 2.9 11.4 0.4 S 57 23:07 7.6 87 8 04 -06-19 4.4 11.4 3.6 S 69 6:05 6.5 67 2 05-06-19 3.3 12.3 0 S 46 0:04 7.8 63 1 06-06-19 -3.9 14.6 0 W 19 16:08 1.6 95 07-06 -19 -1.3 17 0.2 SE 17 4:15 5.5 87 08-06-19 -0.1 11.2 0 NNW 20 15:50 4.1 99 8 09-06-19 0.6 16 0 NW 28 15:57 4.6 100 8 数据
  • 您不需要按列索引数据帧(例如 d[,i])只需将 d 替换为您的数据帧。如果它仍然不起作用,请提供一些数据供我查看:)
猜你喜欢
  • 2021-06-04
  • 1970-01-01
  • 2016-09-09
  • 2019-05-03
  • 2021-11-19
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多