如何在R中逐单元格计算两个dataframe的平均值,优先用tidyverse实现
实现前提
首先确保两个数据框行数、列数完全一致,且对应位置的列均为数值型。
示例数据构造
先复现你给出的测试数据:
library(tidyverse) df1 <- tibble( V1 = c(1, 0, 1), V2 = c(2, 4, 0), V3 = c(3, 5, 6) ) df2 <- tibble( V1 = c(0, 1, 2), V2 = c(3, 2, 0), V3 = c(1, 1, 6) )
1. tidyverse 优先推荐方案
用purrr::map2_dfc逐列做向量化运算,直接输出同结构的数据框,代码简洁且效率高:
df_avg <- map2_dfc(df1, df2, ~ (.x + .y) / 2)
如果两个数据框的列名不匹配,也可以转成矩阵运算后再转回tibble:
df_avg <- as_tibble((as.matrix(df1) + as.matrix(df2)) / 2)
2. 大表高性能方案(基础R)
如果处理的是十万行以上的大表,直接用矩阵运算的性能会更好,代码也很简单:
df_avg <- as.data.frame((as.matrix(df1) + as.matrix(df2)) / 2)
输出结果验证
两种方案得到的结果都和你的示例完全匹配:
print(df_avg) # A tibble: 3 × 3 V1 V2 V3 <dbl> <dbl> <dbl> 1 0.5 2.5 2 2 0.5 3 3 3 1.5 0 6
内容的提问来源于stack exchange,提问作者CosmicFoo
相关产品推荐
相关产品推荐

