2016-05-18 14 views
0

私は2つのデータフレーム(df1、df2)を持っています。 DF1で2つのデータフレームでRの値を条件付きで加算する

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

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

、私はDF2の "FREQ" の値に基づいて、列( "FREQ")を追加したいです。したがって、df1の項とdf2の項が一致する場合、この項のカウント(「freq」)をdf1に追加する必要があります。それ以外の場合は「0」(ゼロ)でなければなりません。

できるだけ処理時間が短くなるようにするにはどうすればよいですか? dplyrでやる方法はありますか?私はそれを把握することはできません!!!

答えて

1

より高速なオプションが必要な場合は、data.table結合を使用して、NA値を0に割り当て(:=)することができます。その後、

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

それとも@Arunが述べたように、コピーを避けるために、「DF1」に「FREQ」列を作成するとon「用語」を参加するには、対応する「i.freq」の値を持つ「FREQ」を交換してください。

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

それともleft_join

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

は私がやると思います使用: 'SETDT(DF1)[、FREQ:= 0] [DF2、FREQ:= i.freq、上= "用語"]'不要なコピーを避けることができます。 – Arun

関連する問題