我有两个数据帧(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做到这一点?我无法弄清楚!!!
答案 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