r - 按不完全匹配的列合并 2 个数据框

标签 r dataframe fuzzyjoin

我有 2 个数据框。我试图将它们合并/连接在一起,同时指定我希望行如何对齐。下面是模拟数据。

df <- data.frame(Race = c("White", "NHPI", "AA"),
                 Cases = c(20, 4, 7)
                 )
df
> df
   Race Cases
1 White    20
2  NHPI     4
3    AA     7

df2 <- data.frame(Race2 = c("African American", "White", "Hawaiian or Pacific Islander"),
                  TotalPopulation = c(200, 400, 50))
df2
> df2
                         Race2 TotalPopulation
1             African American             200
2                        White             400
3 Hawaiian or Pacific Islander              50

我想要做的是合并数据,同时指定哪一行与其他数据集匹配 - 例如,我希望合并对齐“非裔美国人”和“AA”。理想的输出看起来像这样 -

   Race Cases                        Race2 TotalPopulation
1    AA     7             African American             200
2 White    20                        White             400
3  NHPI     4 Hawaiian or Pacific Islander              50

我对编码有点陌生,所以如果你能浏览一下代码那就太好了。非常感谢。

最佳答案

根据@M--评论,你可以这样做:

df %>%
  left_join(df2 %>% 
               mutate(Race = case_when(
                 Race2 == "African American" ~ "AA",
                 Race2 == "Hawaiian or Pacific Islander" ~ "NHPI",
                 .default = Race2
               )))

   Race Cases                        Race2 TotalPopulation
1 White    20                        White             400
2  NHPI     4 Hawaiian or Pacific Islander              50
3    AA     7             African American             200

如果您可以设置全名,然后提取缩写,您可以做得更快,但是请注意,您有 NHPIHawaiian 或 Pacific Islander 并且不匹配。如果您可以在 Hawaiian or Pacific Islander 中包含 N,那么您可以使用:

df %>% 
  left_join(df2 %>% 
              mutate(Race = gsub("[:a-z:]*\\s*", "", Race2),
                     Race = sub("W", "White", Race)))

这项工作在df2假设下的工作如下:

df2 <- data.frame(Race2 = c("African American", "White", "Naaaa Hawaiian or Pacific Islander"),
                  TotalPopulation = c(200, 400, 50))

关于r - 按不完全匹配的列合并 2 个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77656686/

相关文章:

R tidyr : use separate function to separate character column with comma-separated text into multiple columns using RegEx

r - 使用字符串查找唯一行并对数据框列的相应值求和

r - R中的部分字符串匹配并修剪字符

r - 在条件下加入两个数据帧(grepl)

r - 与 data.table 进行 "fuzzy"和非模糊多对一合并

r - 如何根据任意顺序对 data.table 的行进行排序?

R数据表: Why are values of concatenated list lost?

r - R 中随机森林图的图例

dataframe - 如何按条件对 Julia DataFrame 进行子集化,其中列有缺失值

python - 如何删除两个分隔符之间的所有行