R新手技术问询:如何基于三个同结构DataFrame批量生成新DataFrame
用dplyr批量生成符合要求的df4 DataFrame
核心思路
保留country、animal、state三个标识列(与原数据结构一致),对所有水果类列(即除标识列外的其他列)批量执行公式(df1对应列 + df2对应列)/df3对应列的计算,借助dplyr的across()函数实现批量处理,无需逐个指定列名。
完整代码实现
# 加载dplyr包 library(dplyr) # 示例数据(可直接替换为你自己的df1/df2/df3) country <- c('Australia') animal <- c('koala') state <- c('NSW') df1 <- data.frame(country, animal, state, apples=2, oranges=4) df2 <- data.frame(country, animal, state, apples=1, oranges=2) df3 <- data.frame(country, animal, state, apples=5, oranges=2) # 生成目标df4 df4 <- df1 %>% # 保留标识列 select(country, animal, state) %>% # 批量处理所有水果类列 mutate(across( # 自动筛选水果列:排除三个标识列后的所有列 .cols = setdiff(names(df1), c('country', 'animal', 'state')), # 应用计算逻辑 .fns = ~ (df1[[cur_column()]] + df2[[cur_column()]]) / df3[[cur_column()]] )) # 查看结果 print(df4)
运行结果
country animal state apples oranges 1 Australia koala NSW 0.6 3
完全匹配期望输出。
代码说明
setdiff(names(df1), c('country', 'animal', 'state')):自动识别所有水果类列,不管是50个还是更多,都能批量覆盖,无需手动列全所有列名。cur_column():在across()中指代当前处理的列名,实现df1/df2/df3对应列的动态匹配。- 基于dplyr管道语法,逻辑连贯,新手易理解和扩展。
内容的提问来源于stack exchange,提问作者user26403036
相关产品推荐
相关产品推荐

