【问题标题】:Using R & dplyr to summarize - group_by, count, mean, sd [closed]使用 R & dplyr 进行总结 - group_by、count、mean、sd [关闭]
【发布时间】:2019-12-03 06:38:54
【问题描述】:

美好的一天和问候!这是我在 Stack Overflow 上的第一篇文章。我对 R 甚至更新的 dplyr 都很陌生。我有一个由 2 列组成的小型数据集 - var1 和 var2。 var1 列由 num 个值组成。 var2 列包含 3 个级别的因子 - A、B 和 C。

        var1 var2
1  1.4395244    A
2  1.7698225    A
3  3.5587083    A
4  2.0705084    A
5  2.1292877    A
6  3.7150650    B
7  2.4609162    B
8  0.7349388    B
9  1.3131471    B
10 1.5543380    B
11 3.2240818    C
12 2.3598138    C
13 2.4007715    C
14 2.1106827    C
15 1.4441589    C

'data.frame':   15 obs. of  2 variables:
 $ var1: num  1.44 1.77 3.56 2.07 2.13 ...
 $ var2: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 2 2 2 2 2 ...

我正在尝试使用 dplyr 来 group_by var2(A、B 和 C)然后计数,并通过均值和 sd 总结 var1。计数有效,但我没有提供每组的平均值和标准差,而是收到每组旁边的总体平均数和标准差。

为了尝试解决这个问题,我进行了多次互联网搜索。所有结果似乎都提供了与我正在使用的类似的语法。我还阅读了 Stack Overflow 在发布之前提供的所有推荐帖子。另外,我尝试重新启动 R,并确保我没有使用 plyr。

这是我用来创建数据集和 dplyr group_by/summary 的代码。

library(dplyr)
set.seed(123)
var1 <- rnorm(15, mean=2, sd=1)
var2 <- c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B",
          "C", "C", "C", "C", "C")
df <- data.frame(var1, var2)
df

df %>%
  group_by(df$var2) %>%
  summarize(
    count = n(),
    mean = mean(df$var1, na.rm = TRUE),
    sd = sd(df$var1, na.rm = TRUE)
  )

结果如下:

# A tibble: 3 x 4
  `df$var2` count  mean    sd
  <fct>     <int> <dbl> <dbl>
1 A             5  2.15 0.845
2 B             5  2.15 0.845
3 C             5  2.15 0.845

计数似乎有效,显示每个组的计数为 5。每组显示整个列的总体平均值和标准差,而不是每组。预期结果是每组的计数、平均值和标准差。

我确信我忽略了一些明显的东西,但如果能提供任何帮助,我将不胜感激。

谢谢!

【问题讨论】:

  • dplyrdf %&gt;% group_by(var2) %&gt;% summarize( count = n(), mean = mean(var1, na.rm = TRUE), sd = sd(var1, na.rm = TRUE) )中引用列名时不要使用$
  • 你想要group_by(var2)mean(var1)sd(var1)不是 mean(df$var1)sd(df$var1)。第二种语法给出整列的值,而不是分组变量。
  • 非常感谢!!!这两种解决方案都很有效。我非常感谢您的帮助。我很感激。

标签: r dplyr summarize


【解决方案1】:

尽管是通过 cmets 回答的,但我觉得对于第一个问题的这样一个很好的可重现示例值得官方回答。

library(dplyr)
set.seed(123)
var1 <- rnorm(15, mean=2, sd=1)
var2 <- c(rep("A", 5), rep("B", 5), rep("C", 5))
df <- data.frame(var1, var2) 
df_stat <- df %>% group_by(var2) %>% summarize(
                                      count = n(),
                                       mean = mean(var1, na.rm = TRUE), 
                                         sd = sd(var1, na.rm = TRUE)) 
head(df_stat)
# A tibble: 3 x 4
# var2   count  mean    sd
# <fct>  <int>  <dbl>  <dbl>
# 1 A      5    2.19   0.811
# 2 B      5    1.96   1.16 
# 3 C      5    2.31   0.639

【讨论】:

  • 非常感谢,dbo!非常感谢官方的回答。格式和结构都很好。
  • 很高兴为您提供帮助,@earlev4。欢迎来到!
猜你喜欢
  • 2015-09-19
  • 2022-07-21
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2015-09-04
相关资源
最近更新 更多