【问题标题】:Calculate mean and other excluding certain values [duplicate]计算平均值和其他不包括某些值[重复]
【发布时间】:2018-04-09 00:34:12
【问题描述】:

我有一个日期框架(“daten”),其中大多数列都是数值。它们的范围通常从 0 到 5。但是,它们也可以取值 99。我想计算列的平均值,仅排除值 99。

例如:

> mean(c(0, 1, 2, 3, 4, 5, 99))
[1] 16.28571

不是我需要的,而是我希望它像矢量一样被计算

> mean(c(0, 1, 2, 3, 4, 5))
[1] 2.5

,给我我正在寻找的平均值。

有一个类似的问题 (Calculate mean, median by excluding any given number),但该解决方案对我不起作用。然而,我想,一旦我可以排除任何列中的某个值,我可以简单地将它与apply 结合起来,所以我实际上正在寻找一种方法来计算某个向量的平均值,但忽略某些值。

【问题讨论】:

  • 一点旁注;如果值99 是表示缺失数据的代码,那么显式声明它可能是值得的——它将使这样的计算更容易。一种方法是在读取数据时 - 请参阅 read.table 等的 na.strings 参数。
  • 我实际上也有缺失,表示为 NA;但是,由于这是一项调查,我想区分遗漏(没有回答一个项目)和拒绝(这是任何问题中的一个额外选项),从而能够知道有多少受访者拒绝回答。
  • 可能是您的示例不具有代表性,因为我们得到了预期的输出。
  • @akrun,你是对的 - 我没有正确理解链接中发布的答案的语法。

标签: r dataframe mean


【解决方案1】:

我们可以replace 值'99' 和 NA 并得到meanna.rm = TRUE

mean(replace(v1, v1==99, NA), na.rm = TRUE)
#[1] 2.5

数据

v1 <- c(0, 1, 2, 3, 4, 5, 99)

【讨论】:

  • 这(也就是用 NA 代替 99)不是我想做的;但是,我发现了自己的(非常愚蠢的)错误。谢谢!
  • @Lukas 在你的描述中I want to calculate the mean of the columns, excluding only the values 99.
  • 对不起 - 我的措辞在这种情况下具有误导性。
【解决方案2】:

你也可以试试这个:

vec1 <- c(0, 1, 2, 3, 4, 5, 99)
mean(vec1[which(vec1!=99)]
#[1] 2.5

【讨论】:

  • 谢谢;我的错误实际上在于没有正确替换“x”。非常愚蠢,感谢您仍然回答我!
猜你喜欢
  • 2016-10-02
  • 2019-08-28
  • 2021-11-22
  • 2019-04-03
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多