2016-11-16 91 views
0

我需要通過比較兩列合併兩個不等長的數據幀,並且如果上下文匹配(或非常相似),然後合併該特定行。根據字符串合併R中的兩個數據幀

例如,這是什麼樣的數據幀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

歡迎來到StackOverflow!如果你不分享你的嘗試,特別是失敗,你會發現人們會低估你的問題。查看[這個問題](http://stackoverflow.com/help/how-to-ask)瞭解如何提問的最佳實踐。 – Tgsmith61591

回答

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 
相關問題