我正在尝试获取数据框中某一列的标准偏差,并按其他几列进行分组。
x <- c("Paul", "Paul", "Paul", "Jennifer", "Jennifer", "Jennifer")
y <- c("a", "a", "b", "c", "c", "d")
g <- c("eins", "eins", "zwei", "drei", "drei", "vier")
z <- c(1,2,3,4,5,6)
df <- tibble(Fall = x, DRG = y, DRG2 = g, Anzahl = z)
df$Fall <- as.factor(df$Fall)
df$DRG <- as.factor(df$DRG)
df$DRG2 <- as.factor(df$DRG2)
这是小标题:
df
# A tibble: 6 x 4
Fall DRG DRG2 Anzahl
<fct> <fct> <fct> <dbl>
1 Paul a eins 1
2 Paul a eins 2
3 Paul b zwei 3
4 Jennifer c drei 4
5 Jennifer c drei 5
6 Jennifer d vier 6
计算均值作品:
aggregate(x = df,
by = list(df$Fall, df$DRG, df$DRG2),
FUN = mean, na.rm = TRUE)
Group.1 Group.2 Group.3 Fall DRG DRG2 Anzahl
1 Jennifer c drei NA NA NA 4.5
2 Paul a eins NA NA NA 1.5
3 Jennifer d vier NA NA NA 6.0
4 Paul b zwei NA NA NA 3.0
标准偏差给我一个错误:
aggregate(x = df,
by = list(df$Fall, df$DRG, df$DRG2),
FUN = sd, na.rm = TRUE)
Error in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) :
Calling var(x) on a factor x is defunct.
Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
那是为什么?我试图理解错误消息,但我不明白为什么它会以均值而不是标准差运行。如果我将所有因素转换为字符,则标准偏差有效,并给我正确的结果。为什么呢?
致谢
答案 0 :(得分:1)
您正在将整个数据帧作为x
参数传递。相反,您应该将想要的变量传递给aggregate
。您可以使用两种方式使用aggregate
函数。
aggregate(x = df$Anzahl,
by = list(df$Fall, df$DRG, df$DRG2),
FUN = mean, na.rm = TRUE)
aggregate(Anzahl~ Fall + DRG + DRG2, df, FUN = mean, na.rm = TRUE)
sd
函数同样适用。
将尝试计算所有值的mean
/ sd
。传递mean
变量时,sd
和factor
的输出是不同的。
mean(df$Fall)
#[1] NA
但返回警告
警告信息: 在mean.default(df $ Fall)中:参数不是数字或逻辑:返回NA
sd
返回错误。
sd(df$Fall)
var(if(is.vector(x)|| is.factor(x))x else as double(x),na.rm = na.rm)中的错误: 调用因子x上的var(x)已失效。 使用“ all(duplicated(x)[-1L])”之类的东西来测试常数向量。
因此,mean
似乎有效,而sd
返回错误。
答案 1 :(得分:0)
我们可以使用dplyr
library(dplyr)
df %>%
group_by(Fall, DRG, DRG2) %>%
summarise(Anzahl = mean(Anzahl, na.rm = TRUE))