条件绑定:基于两个数据框的值创建新数据框
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
相关产品推荐
相关产品推荐

