【问题标题】:How to merge tapply() functions in R?如何在 R 中合并 tapply() 函数?
【发布时间】:2015-09-01 22:22:42
【问题描述】:

输入:

data(iris)
tapply(iris$Sepal.Length, iris$Species, mean)
tapply(iris$Sepal.Length, iris$Species, median)

期望的输出:显示以下内容的数据集

#setosa versicolor virginica
#5.006  5.936      6.588
#5.0    5.9        6.5

创建包含各种 tapply() 输出的新的单一数据集的最佳方法是什么?

【问题讨论】:

  • aggregate(Sepal.Length ~ Species, iris, function(x) c(mean(x), median(x)))?或者只使用dplyr/data.table 例如data.table(iris)[, .(mean(Sepal.Length), median(Sepal.Length)), by = Species]iris %>% group_by(Species) %>% summarise(mean(Sepal.Length), median(Sepal.Length))
  • 另一个t(sapply(list(mean, median), function(x) with(iris, tapply(Sepal.Length, Species, x))))

标签: r dataset tapply


【解决方案1】:

您可以拨打tapply 试试这个:

mat <-
do.call(cbind, 
        tapply(iris$Sepal.Length, iris$Species, function(x) c(mean(x), median(x)))
        )

输出:

> mat
     setosa versicolor virginica
[1,]  5.006      5.936     6.588
[2,]  5.000      5.900     6.500

【讨论】:

  • 你得到了那个轴。这是更好的答案
  • 感谢@RichardScriven。没关系,无论对 OP 有用,我都不介意。平心而论,你的回答比我快 1 秒:P。我尝试投票,但因为你删除了你的而出错。
  • 我认为这也是更好的答案:-)
【解决方案2】:

可能是这样的:

data(iris)
x <- tapply(iris$Sepal.Length, iris$Species, mean)
y <- tapply(iris$Sepal.Length, iris$Species, median)
df <- rbind(x, y)
df

它产生

  setosa versicolor virginica
x  5.006      5.936     6.588
y  5.000      5.900     6.500

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多