I zwei Datentabellen haben, wie unten gezeigt:
BigrammeNachschlagdaten in einer Datentabelle hinzuzufügen, um eine neue Spalte
w1w2 freq w1 w2
common names 1 common names
department of 4 department of
family name 6 family name
bigrams = setDT(structure(list(w1w2 = c("common names", "department of", "family name"
), freq = c(1L, 4L, 6L), w1 = c("common", "department", "family"
), w2 = c("names", "of", "name")), .Names = c("w1w2", "freq",
"w1", "w2"), row.names = c(NA, -3L), class = "data.frame"))
Unigramme
w1 freq
common 2
department 3
family 4
name 5
names 1
of 9
unigrams = setDT(structure(list(w1 = c("common", "department", "family", "name",
"names", "of"), freq = c(2L, 3L, 4L, 5L, 1L, 9L)), .Names = c("w1",
"freq"), row.names = c(NA, -6L), class = "data.frame"))
gewünschten Ausgang
w1w2 freq w1 w2 w1freq w2freq
common names 1 common names 2 1
department of 4 department of 3 9
family name 6 family name 4 5
Was ich Das gibt mir bisher
setkey(bigrams, w1)
setkey(unigrams, w1)
result <- bigrams[unigrams]
die i.freq
Spalte für w1
getan haben, aber wenn ich versuche, für w2
das gleiche tun die i.freq
Spalte aktualisiert wird, um die Frequenz von w2
zu reflektieren.
Wie bekomme ich freq für beide w1
und w2
in separaten Spalten?
Hinweis: Ich habe schon mit ein wenig Umformung gesehen Lösungen data.table Lookup value and translate und Modify column of a data.table based on another column and add the new column
Suchen Sie eine data.table-Lösung? Ansonsten sollte das funktionieren: bigrams $ w1freq <- unigrams $ freq [match (bigrams $ w1, unigrams $ w1)]; Bigramme $ w2freq <- Unigramme $ freq [Übereinstimmung (Bigramme $ w2, Unigramme $ w1)]; – chinsoon12
@ chinsoon12 Ja, ich würde es lieber mit data.table lösen, da ich die Lösung für größere Datenmengen verwenden möchte. –
ist Ihre 'freq' Spalte in Ihrer gewünschten Ausgabe korrekt? – SymbolixAU