我对R和dplyr都比较新手。我的数据集只有两列:var1和var2。其中,var1包含数字值,而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对var2(A,B和C)进行分组,然后计数,并按平均值和标准差汇总var1。计数起作用了,但是我没有得到每个组的平均值和标准差,而是在每个组旁边获得了总体平均值和标准差。
为解决此问题,我进行了多次互联网搜索。所有结果似乎都提供与我正在使用的语法类似的语法。我还阅读了Stack Overflow在发布之前提供的所有推荐帖子。此外,我尝试重新启动R并确保我未使用plyr。
下面是我用于创建数据集和dplyr group_by / summarize的代码。
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。但是每个组显示的是整列的总体均值和标准差,而非每个组的计数、均值和标准差。期望的结果是每个组的计数、均值和标准差。
我相信我肯定忽略了一些显而易见的东西,但我会非常感激任何帮助。
dplyr
时,引用列名时不要使用$
符号。下面是一个例子:对数据框df
按变量var2
分组,并计算每组的观测数、变量var1
的均值和标准差。代码如下:df %>% group_by(var2) %>% summarize( count = n(), mean = mean(var1, na.rm = TRUE), sd = sd(var1, na.rm = TRUE) )
- Ronak Shahgroup_by(var2)
,mean(var1)
和sd(var1)
,而不是mean(df$var1)
,sd(df$var1)
。第二种语法会给出整个列的值,而不是分组变量的值。 - neilfws