【发布时间】:2014-08-16 09:20:01
【问题描述】:
假设我有这两个数据框:
> df1 <- data.frame(name = c('John Doe',
'Jane F. Doe',
'Mark Smith Simpson',
'Sam Lee'))
> df1
name
1 John Doe
2 Jane F. Doe
3 Mark Smith Simpson
4 Sam Lee
> df2 <- data.frame(family = c('Doe', 'Smith'), size = c(2, 6))
> df2
family size
1 Doe 2
2 Smith 6
我想合并两个数据框以获得这个:
name family size
1 John Doe Doe 2
2 Jane F. Doe Doe 2
3 Mark Smith Simpson Smith 6
4 Sam Lee <NA> NA
但除了以下非常复杂的解决方案之外,我无法找到一种方法来做到这一点,这与我的真实数据变得非常混乱,其中有超过 100 个“姓氏”:
> df3 <- within(df1, {
family <- ifelse(test = grepl('Doe', name),
yes = 'Doe',
no = ifelse(test = grepl('Smith', name),
yes = 'Smith',
no = NA))
})
> merge(df3, df2, all.x = TRUE)
family name size
1 Doe John Doe 2
2 Doe Jane F. Doe 2
3 Smith Mark Smith Simpson 6
4 <NA> Sam Lee NA
我已尝试查看 pmatch 以及 R partial match in data frame 提供的解决方案,但仍然没有找到我想要的。
【问题讨论】:
标签: r merge dataframe match partial