在R中匹配不同长度数据框的保单号列并提取匹配行
解决方案
先修正你的基础R代码
你原来的代码缺少了逗号,这会导致只筛选列而非行。正确的写法是:
dft <- df[df$PolicyNum %in% df1$policynumber, ]
%in% 完全支持处理长度不同的列,它的作用是逐个检查df$PolicyNum中的元素是否存在于df1$policynumber中,和列长度无关。
若需保留两个数据框的所有匹配列
如果你的需求是同时获取两个数据框中匹配行的全部列,推荐用合并操作:
方法1:基础R的merge函数
默认执行内连接(仅保留两边都有匹配保单号的行):
dft <- merge(df, df1, by.x = "PolicyNum", by.y = "policynumber")
- 若要保留
df的所有行(即使df1中无匹配),添加all.x = TRUE - 若要保留
df1的所有行(即使df中无匹配),添加all.y = TRUE
方法2:dplyr包的连接函数(语法更直观)
先安装并加载dplyr:
install.packages("dplyr") library(dplyr)
内连接(仅保留双方匹配的行):
dft <- inner_join(df, df1, by = c("PolicyNum" = "policynumber"))
- 左连接(保留
df所有行,匹配df1对应列):left_join(df, df1, by = c("PolicyNum" = "policynumber")) - 右连接(保留
df1所有行,匹配df对应列):right_join(df, df1, by = c("PolicyNum" = "policynumber"))
内容的提问来源于stack exchange,提问作者AlexisH
相关产品推荐
相关产品推荐

