我想使用几列来拆分数据框,并在每个组上调用fivenum

aggregate(Petal.Width ~ Species, iris, function(x) summary(fivenum(x)))

返回的值是只有两列的data.frame,第二列是矩阵。如何将其转换为data.frame的普通列?

更新

我希望使用fivenum使用更少的代码进行以下操作
ddply(iris, .(Species), summarise,
      Min = min(Petal.Width),
      Q1 = quantile(Petal.Width, .25),
      Med = median(Petal.Width),
      Q3 = quantile(Petal.Width, .75),
      Max = max(Petal.Width)
      )

最佳答案

您可以使用do.call递归地在每个矩阵元素上调用data.frame以获得带有矢量元素的data.frame:

dim(do.call("data.frame",dfr))
[1] 3 7

str(do.call("data.frame",dfr))
'data.frame':   3 obs. of  7 variables:
 $ Species            : Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
 $ Petal.Width.Min.   : num  0.1 1 1.4
 $ Petal.Width.1st.Qu.: num  0.2 1.2 1.8
 $ Petal.Width.Median : num  0.2 1.3 2
 $ Petal.Width.Mean   : num  0.28 1.36 2
 $ Petal.Width.3rd.Qu.: num  0.3 1.5 2.3
 $ Petal.Width.Max.   : num  0.6 1.8 2.5

关于r - 如何使用带有ddply或聚合返回向量(如Fivenum)的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14758566/

10-10 18:36