为 dplyr 中的每个函数保存 na.rm=TRUE
Saving na.rm=TRUE for each function in dplyr
我正在使用 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,而不是
每行?
您应该使用 summarise_at
,它允许您为提供的列计算多个函数并设置它们之间共享的参数:
df %>% group_by(group) %>%
summarise_at("value",
funs(mean = mean, sd = sd, min = min),
na.rm = TRUE)
如果您打算仅将函数应用于一列,则可以使用 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
我正在使用 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,而不是 每行?
您应该使用 summarise_at
,它允许您为提供的列计算多个函数并设置它们之间共享的参数:
df %>% group_by(group) %>%
summarise_at("value",
funs(mean = mean, sd = sd, min = min),
na.rm = TRUE)
如果您打算仅将函数应用于一列,则可以使用 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