R函数内对因子列逐列删NA并0-1归一化计算统计量报错如何解决?
问题原因
map_df遍历数据框列时,传入summary_stats函数的data是单列向量,而drop_na()、summarise()都是仅支持处理数据框/tibble的tidyverse函数,无法直接作用于向量,因此会抛出方法不存在的错误。
你之前单独操作能成功,是因为操作对象是完整数据框,drop_na(x)作用于数据框后返回的仍是数据框,所以summarise可以正常调用。
修正后的代码
直接对传入的向量做处理即可,无需调用数据框专属操作:
library(tidyverse) vars <- c('x', 'y', 'z') names(vars) <- vars summary_stats <- function(data){ # 因子转数值,过滤当前列的NA值 num_vec <- as.numeric(data) num_vec_no_na <- na.omit(num_vec) # 0-1归一化 data_norm <- (num_vec_no_na - min(num_vec_no_na)) / (max(num_vec_no_na) - min(num_vec_no_na)) # 计算描述统计量 tibble( n = length(data_norm), mean = round(mean(data_norm), digits = 3), sd = round(sd(data_norm), digits = 3), se = round(sd/sqrt(n), digits = 3) ) } table <- map_df( df %>% dplyr::select(vars), summary_stats, .id = "covariate" ) table
输出结果
# A tibble: 3 × 5 covariate n mean sd se <chr> <int> <dbl> <dbl> <dbl> 1 x 16 0.536 0.269 0.067 2 y 18 0.556 0.338 0.080 3 z 17 0.588 0.352 0.085
内容的提问来源于stack exchange,提问作者C.Robin
相关产品推荐
相关产品推荐

