1

我正在使用 dplyr 汇总功能。我的数据包含 NA,因此我需要为每个呼叫包括 na.rm=TRUE。例如:

group <- rep(c('a', 'b'), 3)
value <- c(1:4, NA, NA)
df = data.frame(group, value)

library(dplyr)
group_by(df, group) %>% summarise(

          mean = mean(value, na.rm=TRUE),

          sd = sd(value, na.rm=TRUE),

          min = min(value, na.rm=TRUE))

有没有办法只写一次参数 na.rm=TRUE ,而不是每一行?

4

2 回答 2

4

您应该使用summarise_at,它允许您为提供的列计算多个函数并设置它们之间共享的参数:

df %>% group_by(group) %>% 
  summarise_at("value", 
               funs(mean = mean, sd = sd, min = min), 
               na.rm = TRUE)
于 2017-12-11T10:26:17.133 回答
1

如果您打算仅将函数应用于一列,则可以使用filter(!is.na())以便仅过滤掉NA该变量的任何值(即NA在其他变量中不会影响该过程)。

group <- rep(c('a', 'b'), 3)
value <- c(1:4, NA, NA)
df = data.frame(group, value)

library(dplyr)

group_by(df, group) %>% 
  filter(!is.na(value)) %>%
  summarise(mean = mean(value),
            sd = sd(value),
            min = min(value))

# # A tibble: 2 x 4
#    group  mean       sd   min
#   <fctr> <dbl>    <dbl> <dbl>
# 1      a     2 1.414214     1
# 2      b     3 1.414214     2
于 2017-12-11T10:33:35.813 回答