dplyr summarise_each与na.rm

时间:2014-09-10 07:42:46

标签: r dplyr

有没有办法指示dplyrsummarise_eachna.rm=TRUE一起使用?我想用summarise_each("mean")取变量的平均值,但我不知道如何指定它来忽略缺失值。

5 个答案:

答案 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))