我需要通过比较两列来合并两个不等长的数据帧,如果上下文匹配(或非常相似),则合并该特定行。
例如,这就是数据框1的样子
Car horse.power price
Car1 15 NA
Car2 25 NA
Car3 55 NA
和数据框2:
Car price
Car1 (2014) 1234
Car2 turbo 9876
我希望我的最终数据框看起来像这样:
Car horse.power price
Car1 15 1234
Car2 25 9876
Car3 55 NA
我该怎么办?
提前致谢!
编辑:我不明白这是如何与this one重复的。在链接的问题中,您有一个固定的客户ID格式。在我的情况下,你不。如果我应用链接问题中提供的解决方案,我最终会这样:
Car horse.power price
Car1 15 NA
Car1 (2014) NA 1234
Car2 25 NA
Car2 turbo NA 9876
Car3 55 NA
答案 0 :(得分:0)
一种方法是使用levenshtein
距离(使用adist()
):
# set up the two dataframes
df1 <- data.frame(Car = c('Car1', 'Car2', 'Car3'),
horse.power = c(15, 25, 55),
price = c(NA, NA, NA))
df2 <- data.frame(Car = c('Car1 (2014)', 'Car2 turbo', 'Car3 slow'),
price = c(1234, 9876, 21212))
# take the minimal distance and choose the price column
df1$price <- df2$price[apply(adist(df2$Car, df1$Car), 1, which.min)]
df1
这会产生:
Car horse.power price
1 Car1 15 1234
2 Car2 25 9876
3 Car3 55 21212