【问题标题】:How can I take the mean of a categorical binary variable in r?如何获取 r 中分类二元变量的平均值?
【发布时间】:2018-04-14 12:00:45
【问题描述】:
# Creating the folds
nfold <- 10
x <- nrow(TrimCredit)
folds <- createFolds(factor(TrimCredit$Class), k = 10, list = FALSE)
TrimCredit$fold <- folds
ddply(TrimCredit, 'fold', summarise, prop = mean(Class)) #Making sure each fold has the same percentage of 1's and 0's (doesn't work when "Class" is a factor?)
falseNegative <- rep(0, nfold)
falsePositive <- rep(0, nfold)
miss = rep(0, nfold)

我的“TrimCredit”数据集中的“类”列是一列设置为因子的 1 和 0(as.factor(Class))。当“类”是一个因素时,ddply 函数将无法正常工作。我尝试了 prop = mean(as.numeric(Class)),但它没有返回正确的百分比。我需要“类”的平均值(1 的百分比),但我不知道怎么做,因为我需要将它作为一个因素。请帮忙!

【问题讨论】:

  • 一般来说,您不会采用分类变量的平均值(例如,一袋 M&M 巧克力豆的平均颜色是多少?)但是,一般来说,这里无法帮助您解决问题除非您提供可重现的示例,例如提供TrimCredit 的全部或子集以及其他任何内容,以便上述所有代码在其他人的 R 会话中工作。还需要提供您希望输出的外观,并且可以加快回答问题的时间。谢谢:)

标签: r


【解决方案1】:

它不起作用的原因是因为一个因子有两部分,即总是保存为字符向量的级别和一个整数索引。您的级别是c("0", "1"),您的索引是 1s 和 2s 的混合,具体取决于您想要第一级条目 (1 -> 0) 还是第二个条目 (2 -> 1)。

采用mean(Class) 毫无意义,因为 R 不知道您的类值也是数字。 mean(as.numeric(Class)) 不起作用,因为这只会给您留下索引(例如 1 和 2。) - 所以您会得到错误的答案。

有了这些信息,就有很多方法可以得到正确的答案

始终适用于数字级别的解决方案:

mean(as.numeric(as.character(Class))

采用as.character 会将所有索引替换为相关字符。一旦我们这样做了,我们就可以将字符转换为数字 0 和 1,并取它们的平均值。

因为我们知道我们使用的是 0 和 1,所以我们也可以走捷径:

mean(as.numeric(Class)) - 1

这是可行的,因为 2 和 1 之间的差异与 1 和 0 之间的差异相同。这通常不起作用。

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2021-04-30
    • 2020-10-21
    • 2017-04-16
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多