【发布时间】:2021-12-04 14:42:22
【问题描述】:
我的数据集有这样的列和值。列名都以一个公共字符串 Col_a_** 开头
ID Col_a_01 Col_a_02 Col_a_03
1 1 2 1
2 1 NA 0
3 NA 0 2
4 1 0 1
5 0 0 2
我的目标是用该列的模式值替换缺失值。
预期的数据集是这样的
ID Col_a_01 Col_a_02 Col_a_03
1 1 2 1
2 1 0** 0
3 1** 0 2
4 1 0 1
5 0 0 2
第一列的NA被替换为1,因为第一列的众数是1。第二列的NA被替换为0,因为第二列的众数是0。
我可以在下面这样做
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
df$Col_a_01[is.na(Col_a_01)==TRUE] <- getmode(df$Col_a_01)
df$Col_a_03[is.na(Col_a_02)==TRUE] <- getmode(df$Col_a_02)
df$Col_a_03[is.na(Col_a_03)==TRUE] <- getmode(df$Col_a_03)
但是,如果我有 100 列以以 1、2、3..100 结尾的相似名称开头,这将变得笨拙。我很好奇是否有一种更简单、更优雅的方式来实现这一点。提前致谢。
【问题讨论】:
-
@RonakShah,使用模式功能更新问题
标签: r missing-data mode imputation