在R中有条件地添加两个数据帧的值

时间:2016-05-18 07:05:16

标签: r match dplyr

我有两个数据帧(df1,df2)。

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

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

在df1中,我想根据df2中“freq”的值添加一列(“freq”)。因此,如果df1中的项和df2中的项匹配,则应将该项的计数(“freq”)添加到df1。否则它应为“0”(零)。

我该怎么做,以便处理时间尽可能小?有没有办法用dplyr做到这一点?我无法弄清楚!!!

1 个答案:

答案 0 :(得分:1)

如果我们需要更快的选项,可以使用type K int var i int = 2 fmt.Println(isCustom(reflect.TypeOf(""))) // false fmt.Println(isCustom(reflect.TypeOf(int(2)))) // false fmt.Println(isCustom(reflect.TypeOf([]int{}))) // false fmt.Println(isCustom(reflect.TypeOf(struct{ i int }{}))) // false fmt.Println(isCustom(reflect.TypeOf(&i))) // false fmt.Println(isCustom(reflect.TypeOf(map[string]int{}))) // false fmt.Println(isCustom(reflect.TypeOf(A{}))) // true fmt.Println(isCustom(reflect.TypeOf(&A{}))) // true fmt.Println(isCustom(reflect.TypeOf([]A{}))) // true fmt.Println(isCustom(reflect.TypeOf([][]A{}))) // true fmt.Println(isCustom(reflect.TypeOf(struct{ a A }{}))) // true fmt.Println(isCustom(reflect.TypeOf(map[K]int{}))) // true fmt.Println(isCustom(reflect.TypeOf(map[string]K{}))) // true 联接,同时将NA值(data.table)分配到0。

:=

或者为了避免副本,正如@Arun所提到的那样,创建一个&#39; freq&#39;专栏&#39; df1&#39;然后加入library(data.table) setDT(df2)[df1, on = "term"][is.na(freq), freq := 0][] &#39; term&#39;取代&#39; freq&#39;与相应的&#39; i.freq&#39;值。

on

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

left_join