R传播ddply fivenum结果

R spread ddply fivenum result

我拆分了一个数据框,然后使用 ddply 函数重新组合。我应用了 fivenum 函数,以便可以看到每个变量的最小值、第一值、中值、第三值和最大值。

d <- ddply(sara_data_gathered, "Variable", summarise, fivenum = fivenum(Percent))

我现在想知道如何展开这个数据框,以便每个值(最小值、第一个值、中值...)都作为自己的变量呈现。所以我正在寻找一个总共有六个列的 table。我认为 tidyr 可能是一个不错的地方,但我认为我没有为此添加标签的专栏。所以首先我要尝试标记一个新列...

我尝试使用 mutate 和 rep 命令,但您可以从输出中看到它不起作用:/

d <- d %>% 
  mutate(Position = rep(c("Minimum", "First Quartile", "Median", "Third Quartile", "Maximum"), each = 5))
d

可变 fivenum 位置 芳烃 1.0 最低
芳烃 19.0 最低
芳烃 28.0 最低
芳烃 41.0 最低
芳烃 67.0 最低
沥青质 0.0 第一个四分位数
沥青质 1.0 第一个四分位数
沥青质 8.0 第一个四分位数
沥青质 30.5 第一四分位数
沥青质 93.0 第一四分位数

plyr 已停用,您可以使用 dplyr,如果您使用的是 1.0.0,则可以 return summarise 中的多行。然后我们可以使用 pivot_wider.

获取宽格式的数据
library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarise(fivenum = fivenum(mpg), 
            Position = c("Minimum", "First Quartile", "Median", "Third Quartile", "Maximum")) %>%
  tidyr::pivot_wider(names_from = Position, values_from = fivenum)

#    cyl Minimum `First Quartile` Median `Third Quartile` Maximum
#  <dbl>   <dbl>            <dbl>  <dbl>            <dbl>   <dbl>
#1     4    21.4             22.8   26               30.4    33.9
#2     6    17.8             18.6   19.7             21      21.4
#3     8    10.4             14.3   15.2             16.4    19.2

另一种方法是简单地使用基础 R:

中的 tapply 函数
do.call(rbind, tapply(mtcars$mpg, mtcars$cyl, summary))

#    Min. 1st Qu. Median     Mean 3rd Qu. Max.
# 4 21.4   22.80   26.0 26.66364   30.40 33.9
# 6 17.8   18.65   19.7 19.74286   21.00 21.4
# 8 10.4   14.40   15.2 15.10000   16.25 19.2