我有 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
如果您可以设置全名,然后提取缩写,您可以做得更快,但是请注意,您有 NHPI
和 Hawaiian 或 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/