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

基于Subscriberid匹配行数不等的Data Frame并在第二个中新增列

没问题,我来帮你搞定这个基于subscriberid匹配两个数据框并在DF2里新增列的需求~

首先先把你给出的两个数据框完整定义出来(补全了DF2的结构):

# 定义DF1
DF1 <- structure(list(subscriberid = c(1085369583, 1244038459, 1240958486, 1088671175), 
                      cweAge = c(32, 30, 49, 30), 
                      cweGen = c("m", "m", "m", "m"), 
                      hwAge = c(60, 30, 47, 30), 
                      hwGen = c("f", "f", "f", "f"), 
                      cwe = c(1, 1, 1, 1), 
                      hw = c(1, 1, 1, 1)), 
                 .Names = c("subscriberid", "cweAge", "cweGen", "hwAge", "hwGen", "cwe", "hw"), 
                 row.names = 453:456, 
                 class = "data.frame")

# 定义DF2
DF2 <- structure(list(subscriberid = c(1244038459, 1240958486, 1234200861)), 
                 class = "data.frame")

接下来提供两种常用的实现方法,你可以根据自己的习惯选择:

方法1:基础R的merge函数

用左连接(保留DF2的所有行)来匹配数据,把DF1中对应subscriberid的列全部添加到DF2中:

DF2_updated <- merge(DF2, DF1, by = "subscriberid", all.x = TRUE)
  • 参数说明:by = "subscriberid"指定匹配的键列;all.x = TRUE表示保留左表(DF2)的所有行,未匹配到的subscriberid对应的DF1列会填充NA。

方法2:tidyverse的dplyr::left_join

如果你习惯用tidyverse风格的代码,left_join会更直观:

library(dplyr)

DF2_updated <- DF2 %>%
  left_join(DF1, by = "subscriberid")

这个方法和上面的merge效果完全一致,只是语法更简洁流畅。

可选:只添加DF1中的特定列

如果不需要把DF1的所有列都加进来,比如只想添加cweAge和cweGen,可以这样做:

基础R版本:

DF2_updated <- merge(DF2, DF1[, c("subscriberid", "cweAge", "cweGen")], by = "subscriberid", all.x = TRUE)

dplyr版本:

DF2_updated <- DF2 %>%
  left_join(DF1 %>% select(subscriberid, cweAge, cweGen), by = "subscriberid")

运行完上述代码后,DF2_updated就是你要的结果:保留DF2的所有行,同时新增了DF1中匹配到的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:07