【发布时间】:2016-07-22 12:40:54
【问题描述】:
我有以下虚拟数据框:
col1 = c("aa", NA, NA, NA, NA, NA, NA
, "cc", "cc", "cc", "cc", "cc", "cc", "cc", "cc", "cc"
, "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa")
col2 = c("aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa"
, NA, NA, NA, NA, NA, NA, NA, NA, NA
, "bb", "bb", "bb", "bb", "bb", "bb", "bb", "bb", "bb")
col3 = c("aa", "bb", "bb"
, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
col4 = c(NA, NA, NA, 4:27)
col5 = c(28:51, NA, NA, NA)
# Construct the data frame with NAs in categorical and numeric columns
df = data.frame("col1" = col1, "col2" = col2, "col3" = col3
, "col4" = col4, "col5" = col5, stringsAsFactors = FALSE)
我想了解如何使用简单的规则编写一个函数来仅估算 分类 值,即col1, col2, col3:
- 将分类
NA列值与该列中最常见的值进行估算 - 如果出现平局,请选择按字母顺序排列的第一个值,即
aa优先于bb(在col2的情况下)
任何人都可以协助编写一个函数,该函数将df 作为输入并仅返回分类值的插补数据框。 col4, col5 应该保持不变(它们有 NA,但是是数字,所以应该被忽略)。
澄清 对于这个例子:
-
col1NA 应该被推算为"aa" -
col2NAs 应该被推算为"aa"(按字母顺序排列) -
col3NA 应该被推算为"bb"
谢谢
【问题讨论】:
-
到目前为止你的努力是什么?
-
@G.Cocca - 到目前为止我有以下内容:
tt <- table(df$col1) names(tt[which.max(tt)])获得最大值。不确定如何有效地将 cols 分类为分类然后替换 NA。这是基于stackoverflow.com/questions/18433647/…
标签: r