有没有办法指示dplyr
将summarise_each
与na.rm=TRUE
一起使用?我想用summarise_each("mean")
取变量的平均值,但我不知道如何指定它来忽略缺失值。
答案 0 :(得分:89)
按照文档中的链接,您似乎可以使用funs(mean(., na.rm = TRUE))
:
library(dplyr)
by_species <- iris %>% group_by(Species)
by_species %>% summarise_each(funs(mean(., na.rm = TRUE)))
答案 1 :(得分:13)
由于summarise_each
已弃用,因此使用summarise_all
作为补充答案。
na.rm = TRUE
参数中指定funs
(参见@flodel的回答:只需将summarise_each
替换为summarise_all
})。 na.rm = TRUE
参数后添加funs
。 当您想要调用多个函数时,这很有用,例如:
require(dplyr)
iris %>%
group_by(Species) %>%
summarise_all(funs(mean, max, sd), na.rm = TRUE)
答案 2 :(得分:1)
我不知道我的答案是否会在以前的评论中添加一些内容。希望是。
在我的情况下,我有一个实验数据库,该实验包含两组针对不同变量(天)的不同水平的组(对照组,实验组),我想获得另一个变量(权重)的平均值和标准偏差的摘要。每组的可变天的具体水平。
这是我的数据库示例:
animal group day weight 1.1 "control" 73 NA 1.2 "control" 73 NA 3.1 "control" 73 NA 9.2 "control" 73 25.2 9.3 "control" 73 23.4 9.4 "control" 73 25.8 2.1 "exp" 73 NA 2.2 "exp" 73 NA 10.1 "exp" 73 24.4 10.2 "exp" 73 NA 10.3 "exp" 73 24.6
例如,在这种情况下,我想获取第73天每个组(对照组,实验组)的权重的平均值和标准偏差,而忽略NA。
我使用以下命令执行此操作:
data[data$day=="73",] %>% group_by(group) %>% summarise(mean(weight[group == "exp"], na.rm=T),sd(weight[group == "exp"], na.rm=T))
data[data$day=="73",] %>% group_by(group) %>% summarise(mean(weight[group == "control"], na.rm=T),sd(weight[group == "control"], na.rm=T))
答案 3 :(得分:1)
summarise_at
中的 dplyr
函数将汇总特定列的数据集,并允许删除所应用的每个函数的NA。取虹膜数据集并计算从Sepal.Length到Petal.Width的变量的均值和中位数。
library(dplyr)
summarise_at(iris,vars(Sepal.Length:Petal.Width),funs(mean,median),na.rm=T)
答案 4 :(得分:0)
以mtcars
个数据集为例
library(dplyr)
您始终可以使用summarise
来避免冗长的语法:
mtcars %>%
group_by(cyl) %>%
summarise(mean_mpg = mean(mpg, na.rm=T),
sd_mpg = sd(mpg, na.rm = T))