使用 dplyr 计算左连接的结果

Car*_*aet 3 r dplyr

使用 dplyr 计算左外连接结果的正确方法是什么?

考虑两个数据框:

a <- data.frame( id=c( 1, 2, 3, 4 ) )
b <- data.frame( id=c( 1, 1, 3, 3, 3, 4 ), ref_id=c( 'a', 'b', 'c', 'd', 'e', 'f' ) )
Run Code Online (Sandbox Code Playgroud)

a指定四个不同的 ID。b指定引用 中的 ID 的 6 个记录a。如果我想查看每个 ID 被引用的次数,我可以尝试以下操作:

a %>% left_join( b, by='id' ) %>% group_by( id ) %>% summarise( refs=n() )
Source: local data frame [4 x 2]

     id  refs
  (dbl) (int)
1     1     2
2     2     1
3     3     3
4     4     1
Run Code Online (Sandbox Code Playgroud)

然而,结果具有误导性,因为它表明 ID2被引用过一次,而实际上它从未被引用过(在中间数据帧中,ref_id 对应NAID 2)。我想避免引入单独的库,例如sqldf.

Fra*_*ank 5

使用 data.table,你可以做

library(data.table)
setDT(a); setDT(b)

b[a, .N, on="id", by=.EACHI]


   id N
1:  1 2
2:  2 0
3:  3 3
4:  4 1
Run Code Online (Sandbox Code Playgroud)

这里,语法是x[i, j, on, by=.EACHI].

  • .EACHI指的是 的每一行i=a
  • j=.N使用特殊变量来表示行数。