I haben Datenrahmen df1
mit Säulen "Year"
und "Agent"
:Auswählen von Spalten basierend auf Übereinstimmungen/Fuzzy-Übereinstimmungswert von zwei Spalten
df1 <- structure(list(Year = c(1999, 1999, 1998), Agent = list(c("abn-amro-nv", "suntrust banks", "wachovia"), c("jp morgan", "abn-amro-nv"), c("ba-corp", "boston bks", "nbd"))), .Names = c("Year", "Agent"), row.names = c(NA, -3L), class = "data.frame")
#df1
Year Agent
1999 abn-amro-nv, suntrust banks, wachovia
1999 jp morgan, abn-amro-nv
1998 ba-corp, boston bks, nbd
Ich habe einen anderen Datenrahmen df2
die 5 Spalten "Rank"
, "Arrangers"
, "Share"
, "Issues"
und "Year"
, wie folgend:
df2 <- structure(list(Rank = 1:3, Arranger = c("jp morgan", "boston-bank", "suntrust bk"), Share = c(1.2, 1.8, 2.1), Issues = c(7L, 4L, 3L), Year = c(1999L, 1998L, 1999L)), .Names = c("Rank", "Arranger", "Share", "Issues", "Year"), class = "data.frame", row.names = c(NA, -3L))
#df2
Rank Arranger Share Issues Year
1 jp morgan 1.2 7 1999
2 boston-bank 1.8 4 1998
3 suntrust bk 2.1 3 1999
ich brauche "Agent"
undübereinstimmenvon df1
mit und "Year"
von df2
und wählen 3 Spalten aus df2
wie "Rank"
, "Share"
, "Issues"
. Anpassung von "Agent"
von df1
mit "Arranger"
von df2
wird Fuzzy-Abgleich sein. Weil sie nicht genau gleich sind.
Meine ursprünglichen Datenrahmen sind nur zu Ihrer Information sehr groß.
Im Anschluss ist mein Code:
library(stringdist)
leadrep <- matrix(ncol=3, nrow=length(df1$Agent))
for (i in 1:length(df1$Agent)) {
for (j in 1:length(df2$Arrangers)) {
if ((ain(df2$Arrangers[j], df1$Agent[[i]], maxDist=0.3,
method="jw")) == 'TRUE' & (df1$Year[i] == df2$Year[j])){
leadrep[i,] <- df2[j, c('Rank', 'Mkt.Share', 'NumberofIssues')]
}
}
}
Im Code leadrep
Matrix ist, die ich erstellt. Damit kann ich in der for loop
auffüllen. Ich verwendete stringdist
Paket und ain
Funktion, um Fuzzy-Abgleich zu tun. Und ich habe zwei for loop
und if
verwendet, um die Strings und das Jahr zu vergleichen.
Der obige Code funktioniert, aber es dauert zu lange, um die Ergebnisse zu erhalten, da meine Datenrahmen groß sind. Ich denke wirklich, dass mein Ansatz oben nicht effizient ist. Es wäre eine große Hilfe, wenn mir jemand eine bessere Alternative zu meinem bestehenden Code bietet.
Vielen Dank für Ihre Hilfe.
Welche Fehler haben Sie bekommen? – shayaa
'Fehler: unerwartet '&' in: " if ((ain (df2 $ Arranger [j], df1 $ Agent [[i]], maxDist = 0.3, method = "jw")) == 'TRUE') & "' Fehler: unerwartet '}' in "}" – Santosh
Diese Frage könnte aufgrund eines einfachen Tippfehlers eines zusätzlichen '('. – shayaa