`summarise()`是否保留其他未汇总的列?

问题描述 投票:0回答:1

我正在尝试按照这篇文章https://www.datanovia.com/en/lessons/ggplot-error-bars/制作带有误差线的绘图。然而,总结并不完全有效。为什么?

> df$dose <- as.factor(df$dose)
> head(df, 3)
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
> df.summary <- df %>%
+     group_by(dose) %>%
+     summarise(
+         sd = sd(len, na.rm = TRUE),
+         len = mean(len)
+     )
> df.summary
        sd      len
1 7.649315 18.81333

但看起来你应该得到类似的东西:

## # A tibble: 3 x 3
##   dose     sd   len
##   <fct> <dbl> <dbl>
## 1 0.5    4.50  10.6
## 2 1      4.42  19.7
## 3 2      3.77  26.1

尝试了第一个答案,但仍然不起作用

> df <- data.frame(len = runif(30, 4.2, 11.5), supp = "VC", dose = sample(c(.5, 1, 2), 30, replace = TRUE))
> df.summary <- df %>%
+     group_by(dose) %>%
+     summarise(
+         sd = sd(len, na.rm = TRUE),
+         len = mean(len)
+     )
> df.summary
        sd      len
1 2.385391 8.057899
> dput(df[1:10,])
structure(list(len = c(6.38568101720884, 9.66049139532261, 6.71973214379977, 
9.11211366723292, 10.07433216176, 8.6760600333102, 5.71324644873384, 
4.77394210803322, 10.921557949041, 4.29420428201556), supp = c("VC", 
"VC", "VC", "VC", "VC", "VC", "VC", "VC", "VC", "VC"), dose = c(2, 
1, 2, 0.5, 1, 2, 0.5, 1, 1, 1)), row.names = c(NA, 10L), class = "data.frame")
r dplyr tidyverse
1个回答
0
投票

我建议您使用

tidyverse
加载必要的库,并且不要使用已被取代的
plyr
。像这样:

library(tidyverse)

# the df in your example
df %>%
       group_by(dose) %>%
       summarise(
             sd = sd(len, na.rm = TRUE),
            len = mean(len)
         )
#it gives
# A tibble: 3 x 3
   dose    sd   len
  <dbl> <dbl> <dbl>
1   0.5  2.40  7.41
2   1    3.15  7.94
3   2    1.24  7.26
© www.soinside.com 2019 - 2024. All rights reserved.