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

条件绑定:基于两个数据框的值创建新数据框

Solution to Create df3 Based on df1 and df2

没问题,这有几种简洁的方法可以帮你生成符合要求的df3,我分两种常用的R处理方式来演示:

方法一:基础R实现(无需额外包)

这种方法适合不想加载第三方包的场景,通过向量化操作批量处理年份列:

# 先复制df1的结构作为df3的基础
df3 <- df1
# 筛选出除了Company之外的年份列
year_columns <- setdiff(names(df3), "Company")
# 批量处理每一列:当df2对应值为1时取df1的值,否则设为NA
df3[year_columns] <- mapply(
  function(val_df1, flag_df2) ifelse(flag_df2 == 1, val_df1, NA),
  df1[year_columns],
  df2[year_columns]
)

# 查看结果
df3

运行后得到的结果和你期望的一致:

Company X1980 X1981
1       A    21    35
2       B    NA    33
3       C    NA    45
4       D    57    NA
5       E    11    NA
6       F    NA    NA

方法二:tidyverse/dplyr实现(更简洁易读)

如果你习惯使用tidyverse生态,dplyr的across()函数可以让代码更简洁直观:

library(dplyr)

df3 <- df1 %>%
  mutate(
    # 对除Company外的所有列进行处理
    across(-Company, ~ ifelse(df2[[cur_column()]] == 1, ., NA))
  )

这段代码的逻辑和基础R方法完全一致,只是用了tidyverse的语法风格,更适合处理复杂的数据清洗流程。


内容的提问来源于stack exchange,提问作者Connor Uhl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:37:45