You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:40:04