2016-05-18 27 views
0

Ich habe zwei Datenrahmen (df1, df2).Bedingtes Addieren von Werten in R mit zwei Datenrahmen

df1 <- data.frame(term = c("A", "B", "C", "D", "E", "F")) 

df2 <- data.frame(term = c("C", "F", "G"), freq = c(7, 3, 5)) 

In df1, möchte ich auf der Grundlage der Werte von "Freq" in df2 eine Spalte ("Freq") hinzuzufügen. Wenn also der Term in df1 und der Term in df2 übereinstimmen, sollte die Anzahl ("freq") dieses Terms zu df1 addiert werden. Sonst sollte es "0" (Null) sein.

Wie kann ich es tun, so dass die Bearbeitungszeit so klein wie möglich ist? Gibt es einen Weg, wie man es mit dplyr macht? Ich kann es nicht herausfinden !!!

Antwort

1

Wenn wir eine schnellere Option benötigen, kann eine Verknüpfung verwendet werden, und die NA-Werte werden 0 (:=) zugewiesen.

library(data.table) 
setDT(df2)[df1, on = "term"][is.na(freq), freq := 0][] 

oder Kopien zu vermeiden, wie @Arun erwähnt, erstellen Sie eine ‚freq‘ Spalte in ‚DF1‘ und dann on ‚Term‘ ersetzen Sie den ‚freq‘ mit der entsprechenden ‚i.freq‘ Werten verbinden.

setDT(df1)[, freq := 0][df2, freq := i.freq, on = "term"] 

Oder verwenden left_join

library(dplyr) 
left_join(df1, df2, by = 'term') %>% 
     mutate(freq = replace(freq, is.na(freq), 0) 
+1

ich tun würde: 'setDT (DF1) [, Freq: = 0] [DF2, Freq: = i.freq, auf = "Ausdruck"]' das vermeidet unnötige Kopien. – Arun

Verwandte Themen