使用 R & dplyr 进行总结 - group_by, count, mean, sd
Using R & dplyr to summarize - group_by, count, mean, sd
美好的一天,问候!这是我在 Stack Overflow 上的第一个 post。我是 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 在 posting 之前提供的所有推荐 post。另外,我尝试重新启动 R,并确保我没有使用 plyr。
这是我用来创建数据集和 dplyr group_by/总结的代码。
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。每组显示整个列而不是每个组的总体均值和标准差。预期结果是每组的计数、平均值和标准偏差。
我确信我忽略了一些明显的东西,但我将不胜感激任何帮助。
谢谢!
尽管通过评论回答了问题,但我觉得第一个问题的如此好的可重现示例值得官方回答。
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
美好的一天,问候!这是我在 Stack Overflow 上的第一个 post。我是 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 在 posting 之前提供的所有推荐 post。另外,我尝试重新启动 R,并确保我没有使用 plyr。
这是我用来创建数据集和 dplyr group_by/总结的代码。
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。每组显示整个列而不是每个组的总体均值和标准差。预期结果是每组的计数、平均值和标准偏差。
我确信我忽略了一些明显的东西,但我将不胜感激任何帮助。
谢谢!
尽管通过评论回答了问题,但我觉得第一个问题的如此好的可重现示例值得官方回答。
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