【问题标题】:Get the same result as the "by" function but to a vector得到与“by”函数相同的结果,但得到一个向量
【发布时间】:2015-02-23 07:46:16
【问题描述】:

我目前正在使用 de ggplot 包中的 diamonds 数据集。

我想获得“价格”中位数最高的“切割”字段。我可以使用 by 函数得到结果。

by(diamonds$price, diamonds$cut, median)

我只得到“价格”中位数最高的“切割”的名称。我正在尝试将“by”值传递给矩阵,这样我就可以获得所需的列,但到目前为止还没有成功。 有什么建议么?谢谢。

【问题讨论】:

  • names 不工作吗? names(by(diamonds$price, diamonds$cut, median))
  • 是的,但缺少值的过滤部分。 Tapply 原来是一个更灵活的解决方案,但谢谢。

标签: r


【解决方案1】:

by() 是基础 R 函数家族的成员,这些函数按分类因子拆分数据,对拆分执行汇总计算,并以各种不同的格式返回结果。其他包括aggregate()ave()tapply(),我在这里使用后者:

meds <- tapply(diamonds$price, diamonds$cut, median)
names(which.max(meds))
# [1] "Fair"

【讨论】:

  • 有趣的是,by 也适用于这种情况:names(which.max(by(diamonds$price, diamonds$cut, median)))
  • @thelatemail -- 是的,我也看到了,有点惊讶。 tapply() 在这里仍然感觉更直接,但可能只是因为我碰巧更经常使用它;)
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2019-01-30
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多