gpt4 book ai didi

r - 在数据框中的所有列中估算最频繁的分类值

转载 作者:行者123 更新时间:2023-12-02 00:55:04 24 4
gpt4 key购买 nike

我有以下虚拟数据框:

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:

  1. 用该列中出现频率最高的值估算分类 NA 列值
  2. 如果出现平局,则选择按字母顺序排列的第一个值,即 aa 优先于 bb(在 col2 的情况下)

任何人都可以协助编写一个函数,该函数将 df 作为输入并仅返回分类值的估算数据帧。 col4, col5 应该保持不变(它们有 NA 但是是数字所以应该被忽略)。

澄清对于这个例子:

  1. col1 NAs 应该被推算为 "aa"
  2. col2 NAs 应该被推算为 "aa"(按字母顺序排序)
  3. col3 NAs 应该被推算为 "bb"

谢谢

最佳答案

我们可以为非数字列创建索引

i1 <- !sapply(df, is.numeric)

为模式创建一个函数

Mode <- function(x) { 
ux <- sort(unique(x))
ux[which.max(tabulate(match(x, ux)))]
}

替换 character 列中出现次数最多的 NA

df[i1] <- lapply(df[i1], function(x)
replace(x, is.na(x), Mode(x[!is.na(x)])))

关于r - 在数据框中的所有列中估算最频繁的分类值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com