【发布时间】:2017-05-04 06:05:49
【问题描述】:
使用 data.table,我想根据另一个表对一个表进行子集化。
DT1 <- data.table( A = c(1:5,1:2), B = c(1,1,1,2,2,2,3), C = c(1:3))
DT2 <- data.table( A = c(1, 2, 3), B = c(1,3,1), D = c(4:6))
输出应该只包含第一个表的列。
A B C
1: 1 1 1
2: 2 3 1
3: 3 1 3
使用合并功能,我得到两个表的列
merge(DT1, DT2, by = c("A", "B"))
A B C D
1: 1 1 1 4
2: 2 3 1 5
3: 3 1 3 6
由于我的数据集有更多的列,我正在寻找一种不使用合并函数但使用 data.table 语法 [i, j, by] 来获取结果的方法。 但是,对第一个表进行子集化后,它不会正确合并。
DT1[A %in% DT2[,A] & B %in% DT2[, B]]
A B C
1: 1 1 1
2: 2 1 2 < wrong
3: 3 1 3
4: 2 3 1
DT1[A == DT2[,A] & B == DT2[, B]]
A B C
1: 1 1 1
2: 3 1 3
Warning messages:
1: In A == DT2[, A] :
longer object length is not a multiple of shorter object length
2: In B == DT2[, B] :
longer object length is not a multiple of shorter object length
有没有办法像合并一样获得正确的行,但使用 data.table 语法 [ ]?
【问题讨论】:
标签: r merge data.table subset