aggreate函数不使用标准偏差和因子
我试图得到一个数据框中一列的标准偏差,由其他几列分组aggreate函数不使用标准偏差和因子,r,R,我试图得到一个数据框中一列的标准偏差,由其他几列分组 x <- c("Paul", "Paul", "Paul", "Jennifer", "Jennifer", "Jennifer") y <- c("a", "a", "b", "c", "c", "d&
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)
标准偏差给了我一个错误:
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.
为什么呢?我试图理解错误信息,但我不明白为什么它适用于均值,而不适用于标准差。如果我把所有的因子都转换成字符,那么标准差就起作用了,并给出了正确的结果。为什么呢
将整个数据帧作为
x
参数传递。相反,您应该传递要聚合的变量。有两种方法可以使用aggregate
函数
sd
功能
在您的尝试中,将计算所有值的
平均值
/sd
。传递因子
变量时,平均值
和标准差
的输出不同
mean(df$Fall)
#[1] NA
但是返回一个警告
警告信息:
默认值(df$Fall):参数不是数字或逻辑参数:返回NA
而sd
返回一个错误
sd(df$Fall)
变量中的错误(如果(is.vector(x)| is.factor(x))x否则为.double(x),na.rm=na.rm):
对因子x调用var(x)已失效。
使用类似“all(复制的(x)[-1L])”的方法测试常量向量
因此,
mean
似乎有效,而sd
返回一个错误。我们可以使用dplyr
sd(df$Fall)
library(dplyr)
df %>%
group_by(Fall, DRG, DRG2) %>%
summarise(Anzahl = mean(Anzahl, na.rm = TRUE))
那是真的!但是为什么R给了我一个sd的错误,而不是这个例子中的均值?我正在试图找出这两者之间的区别。希望我在答案中的更新有助于理解两者之间的区别。这只是随机的还是背后有一个概念?我不知道你在问什么。我觉得这种行为完全合乎逻辑<因子变量上的代码>平均值返回带有警告的NA,而它计算数值变量的实际平均值<另一方面,代码>sd在因子变量上运行时返回错误。警告不会停止函数的执行,而错误会停止执行。你认为这其中的哪一部分是随机的?对我来说,函数mean返回警告,函数sd返回错误是随机的。
mean(df$Fall)
#[1] NA
sd(df$Fall)
library(dplyr)
df %>%
group_by(Fall, DRG, DRG2) %>%
summarise(Anzahl = mean(Anzahl, na.rm = TRUE))