使用 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.
使用 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使用特殊变量来表示行数。| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |