gpt4 book ai didi

r - 合并具有不同列名的表

转载 作者:行者123 更新时间:2023-12-04 09:31:37 26 4
gpt4 key购买 nike

如果我理解正确,默认情况下data.table通过比较设置为键并具有相同名称的列来合并两个表。如果我的表具有不同的列名,应该怎么写?例如:

set.seed(123)
DT1<-data.table(col1=sample(letters,5,replace=TRUE),col2=sample(LETTERS[1:5],5,replace=TRUE),col3=sample(1:2,5,replace=TRUE))
DT2<-data.table(col4=sample(1:3,10,replace=TRUE),col5=sample(LETTERS[1:5],10,replace=TRUE),col6=sample(1:100,10,replace=TRUE))
(DT1)
(DT2)

> (DT1)
col1 col2 col3
1: h A 2
2: u C 1
3: k E 2
4: w C 2
5: y C 1
> (DT2)
col4 col5 col6
1: 3 D 48
2: 1 C 76
3: 1 C 22
4: 1 B 32
5: 3 A 24
6: 3 E 15
7: 3 E 42
8: 2 D 42
9: 3 D 37
10: 2 A 16

我应该用 DT1[写什么来进行合并,以便仅选择col2 == col5&col3 == col4的行?
这是预期的输出:
   col1 col2 col3 col4 col5 col6
h A 2 2 A 16
u C 1 1 C 76
u C 1 1 C 22
y C 1 1 C 76
y C 1 1 C 22

提前致谢!

最佳答案

使用data.table基于子集的联接以及最近实现的on=参数和nomatch=0L,这很简单:

DT2[DT1, on=c(col5="col2", col4="col3"), nomatch=0L]

有关更多信息,请参见 secondary indices小插图。

或者,如果您已键入data.tables键,则可以跳过 on=参数。但是上面的解决方案是惯用的,因为它保留了原始data.tables的顺序,并且通过查看代码可以清楚地知道正在查找哪些列。
setkey(DT1, col2, col3)
setkey(DT2, col5, col4)
DT2[DT1, nomatch=0L]

查看旧版本的历史记录。

关于r - 合并具有不同列名的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16047253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com