R语言计算两数据框列相减均值及colMeans报错解决
解决方法
报错原因
colMeans() 要求输入至少二维的数组或数据框,而 df1$AU 是一维向量,所以会触发维度不匹配的报错。同时你原来的代码逻辑是先分别求两列的均值再相减,和你需要的「逐行相减后再求均值」的需求不一致,只有在两列都无缺失值的时候两者结果才会相同,存在NA时结果会有偏差。
高效实现方案
基础R向量化方案(推荐,性能最优)
利用R的向量广播特性,直接用一维的AU列和多列的UF矩阵做逐行减法,再对每列求均值即可,支持任意数量的UF列:
# 提取df2中所有UF开头的列 uf_df <- df2[, startsWith(colnames(df2), "UF")] # 计算逐行差值的列均值,自动忽略NA值 res <- data.frame( uf_col = colnames(uf_df), mean_sub = colMeans(df1$AU - uf_df, na.rm = TRUE) )
tidyverse方案(可读性更强)
如果习惯dplyr语法,可以用长表转换的方式实现,逻辑更直观,额外加了按Date关联的步骤,避免两个数据框行顺序不一致导致计算错误,更稳妥:
library(dplyr) library(tidyr) res <- inner_join(df1, df2, by = "Date") %>% pivot_longer(cols = starts_with("UF"), names_to = "uf_col", values_to = "uf_val") %>% group_by(uf_col) %>% summarise(mean_sub = mean(AU - uf_val, na.rm = TRUE))
内容的提问来源于stack exchange,提问作者Cláudio Siva
相关产品推荐
相关产品推荐

