我想合并两个没有公共列的data. table,所以最后得到N1*N2
行,其中N1
和N2
是每个 Dataframe 中的行数。
以R为底数进行计算:
A <- data.frame(id = 1:6, value = 19:24)
B <- data.frame(value2 = c(25, 25, 26, 26), value3 = 4:5)
A
#> id value
#> 1 1 19
#> 2 2 20
#> 3 3 21
#> 4 4 22
#> 5 5 23
#> 6 6 24
B
#> value2 value3
#> 1 25 4
#> 2 25 5
#> 3 26 4
#> 4 26 5
merge(A, B, all = TRUE)
#> id value value2 value3
#> 1 1 19 25 4
#> 2 2 20 25 4
#> 3 3 21 25 4
#> 4 4 22 25 4
#> 5 5 23 25 4
#> 6 6 24 25 4
#> 7 1 19 25 5
#> 8 2 20 25 5
#> 9 3 21 25 5
#> 10 4 22 25 5
#> 11 5 23 25 5
#> 12 6 24 25 5
#> 13 1 19 26 4
#> 14 2 20 26 4
#> 15 3 21 26 4
#> 16 4 22 26 4
#> 17 5 23 26 4
#> 18 6 24 26 4
#> 19 1 19 26 5
#> 20 2 20 26 5
#> 21 3 21 26 5
#> 22 4 22 26 5
#> 23 5 23 26 5
#> 24 6 24 26 5
但如果我现在有两个数据表,而不再有 Dataframe ,它会出错:
library(data.table)
A <- data.table(id = 1:6, value = 19:24)
B <- data.table(value2 = c(25, 25, 26, 26), value3 = 4:5)
merge(A, B, all = TRUE)
#> Error in merge.data.table(A, B, all = TRUE): A non-empty vector of column names for `by` is required.
如何使用data.table
(不一定使用merge()
)重现base R行为?
3条答案
按热度按时间d6kp6zgx1#
您正在查找交叉联接。在
data.table
中,有一个CJ
函数,但它只能处理一个数据集,否则您可以执行以下操作:请注意替代
dplyr
解决方案:bqf10yzr2#
来自
data.table
repo上的GitHub问题的替代方案:创建于2023年2月6日,使用reprex v2.0.2
q5lcpyga3#
结果
数据