如何在多文件列不完整时计算指定列的均值?
解决方案
核心问题是直接引用不存在的列导致报错,只需先筛选出数据中实际存在的目标列,再进行后续计算即可:
merged <- rbindlist(dt.tidied, fill = TRUE, use.names = TRUE) # 定义目标列 target_cols <- c('Date/Time', 'C1 (C1)', 'C2 (C2)', 'C5 (C5)', 'C8 (C8)', 'C9 (C9)', 'C10 (C10)') # 筛选出merged中实际存在的目标列 existing_cols <- intersect(target_cols, colnames(merged)) # 仅处理存在的列,避免报错 abc <- merged[, ..existing_cols] %>% as_tibble() %>% group_by(Time_sp = lubridate::floor_date(`Date/Time`, "5 mins")) %>% summarise(across(where(is.numeric), ~ if(mean(is.na(.x)) > 0.5) NA else mean(.x, na.rm = TRUE))) write.csv(abc, paste0(dirlist[idx],"_mean.csv"), row.names = FALSE)
关键修改说明
- 用
intersect(target_cols, colnames(merged))自动匹配数据中实际存在的目标列,忽略不存在的列 - 后续所有操作基于筛选后的
existing_cols,彻底避免因引用不存在的列抛出错误 - 保留原有的均值计算逻辑:仅当列的NA占比不超过50%时计算均值,否则返回NA
内容的提问来源于stack exchange,提问作者Alexia k Boston
相关产品推荐
相关产品推荐

