2017-07-13 1 views
1

Ich habe die zwei Datenrahmen, die ich zusammenführen muss. Es gibt eine Spalte in beiden Datenrahmen, in die ich die beiden Datenrahmen zusammenführen möchte. Aber die Daten in diesen beiden Spalten sind nicht ähnlich. Die Schlüsselspalte in diesen zwei Datenrahmen mit der Länge von 12 Ziffern und die andere Spalte haben 5 bis 6 Ziffern. Ich möchte auf der Grundlage ähnlicher 5-6 Ziffern aus dem zweiten Datenrahmen zusammenführen.Verschmelzen von zwei Datenrahmen mit Fuzzy Merge

Meine Daten Rahmen:

df1 = data.frame(CustomerId = c(987689000000,786581000000,765909000000,565400000000,746541000000,516890000000), Product = c(rep("Toaster", 3), rep("Radio", 3))) 

df2 = data.frame(customerId = c(987689,986581,7659090,56540,74651,5168900), State = c(rep("Alabama", 2), rep("Ohio", 1))) 

Ich versuchte c = merge(df1,df2 , key =("CustomerId "),all = TRUE)

meine Erwartete Ausgabe wie: -

CustomerId Product State 
1 987689  Toaster  Alabama 
2 786581  Toaster  Alabama 
3 7659090 Toaster  Alabama 
4 56540  Radio  Alabama 
5 74651  Radio  Alabama 
6 516890  Radio  Alabama 

Antwort

1

hier eine Lösung. Der Schlüssel ist, formatC zu verwenden, um das Format von Zahlen anzupassen, und str_extract zu verwenden, um das übereinstimmende Teil zu extrahieren. Nach diesem Schritt können Sie bestimmen, ob Sie left_join, right_join oder inner_join verwenden möchten, um den Teil der Datenrahmen beizubehalten. df3 ist die endgültige Ausgabe.

Beachten Sie, dass die von Ihnen bereitgestellten Beispiele IDs enthalten, die nicht übereinstimmen. Daher ist es aufgrund der von Ihnen bereitgestellten Datenrahmen nicht möglich, die gewünschte Ausgabe zu reproduzieren.

# Load packages 
library(dplyr) 
library(stringr) 
library(rebus) 

# Process the data 
df3 <- df1 %>% 
    # Use str_extract to get CustomerId matched in df2 
    mutate(CustomerId = str_extract(string = formatC(CustomerId, 
                digits = 0, 
                format = "f"), 
            pattern = or1(df2$customerId))) %>% 
    # Join with df2 by the updated CustomerId 
    right_join(df2 %>% 
       mutate(CustomerId = as.character(customerId)) %>% 
       select(-customerId), 
      by = "CustomerId") 

# View the result 
df3 
# CustomerId Product State 
#1  987689 Toaster Alabama 
#2  986581 <NA> Alabama 
#3 7659090 Toaster Ohio 
#4  56540 Radio Alabama 
#5  74651 <NA> Alabama 
#6 5168900 Radio Ohio 
+0

Das funktioniert absolut perfekt !! Danke !! –

+0

Ich bin froh zu helfen. Wenn diese Antwort hilfreich ist, akzeptieren Sie sie bitte, indem Sie auf die obere linke grüne Markierung klicken. – www

Verwandte Themen