我有多个文本文件,包含各个列。我只想要每组文件中可能存在也可能不存在的几列的平均值。
我正在使用以下代码来计算所选列的平均值。我面临的问题是并非所有文件都包含所有列。例如,文件夹 1 中的文件具有所有列,文件夹 2 中的文件具有 C1、C2、C8、C9 列,文件夹 3 中的文件具有 C1、C2、C5 列等。
由于这个原因,它只为包含所有列的文件夹 1 生成输出,并为文件夹 2 和 3 给出错误,指出未找到列(不存在于各自的文件夹中)。
我希望代码应该以这样的方式运行:如果文件包含 cn 中所选列中的任何列,则应在输出中计算其平均值,而不会给出 cn 中提到的其他列不会出现的任何错误存在于文件中。
代码:
merged <- rbindlist(dt.tidied, fill = TRUE, use.names = TRUE)
cn <- c('Date/Time', 'C1 (C1)', 'C2 (C2)', 'C5 (C5)', 'C8 (C8)', 'C9 (C9)', 'C10 (C10)')
abc <- merged[, ..cn] %>%
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)
最佳答案
merged <- rbindlist(dt.tidied, fill = TRUE, use.names = TRUE)
cn <- c('Date/Time', 'C1 (C1)', 'C2 (C2)', 'C5 (C5)', 'C8 (C8)', 'C9 (C9)', 'C10 (C10)')
merged %>%
select(any_of(cn)) %>%
as_tibble() %>%
group_by(Time_sp = lubridate::floor_date(`Date/Time`, "5 mins")) %>%
summarise(across(where(is.numeric),
~ ifelse(mean(is.na(.x)) > 0.5), NA, mean(.x, na.rm = TRUE ))) -> abc
write.csv(abc, paste0(dirlist[idx],"_mean.csv"), row.names = FALSE)
关于r - 如果并非所有列都存在于所有文件中,如何计算列的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76347886/