与 data.table 合并数据以重复唯一值

Posted

技术标签:

【中文标题】与 data.table 合并数据以重复唯一值【英文标题】:Data merge with data.table for repeating unique values 【发布时间】:2019-01-31 11:31:07 【问题描述】:

我正在尝试将数据表“A”中的两列与另一个数据表“B”中的另一列合并,这是一列的唯一值。我想以这样一种方式合并,即对于数据表 'A' 中两个变量的每个唯一组合,我们都会重复数据表 'B' 中列的所有唯一值。

我尝试了合并,但它没有给我所有的值。我还尝试了 data.table 中的自动回收功能,但这也没有给我结果。

输入: 数据表A

X Y

1 1

1 2

1 3

2 1

3 1

4 4

4 5

5 6

data.table B

Z

1

2

预期输出

X Y Z

1 1 1

1 1 2

1 2 1

1 2 2

1 3 1

1 3 2

2 1 1

2 1 2

3 1 1

3 1 2

4 4 1

4 4 2

4 5 1

4 5 2

5 6 1

5 6 2

【问题讨论】:

请参阅https://github.com/Rdatatable/data.table/pull/814 【参考方案1】:

我们可以从tidyr使用crossing

library(tidyr)
crossing(A, B)
#   X Y Z
#1  1 1 1
#2  1 1 2
#3  1 2 1
#4  1 2 2
#5  1 3 1
#6  1 3 2
#7  2 1 1
#8  2 1 2
#9  3 1 1
#10 3 1 2
#11 4 4 1
#12 4 4 2
#13 4 5 1
#14 4 5 2
#15 5 6 1
#16 5 6 2

merge from base R,但顺序会略有不同

merge(A, B)

要获得正确的顺序,请反向替换参数,然后对列进行排序

merge(B, A)[c(names(A), names(B))]

【讨论】:

非常感谢阿伦!但是基本 R 合并给出了一个错误 "A non-empty vector of column names for by is required" 。这是因为没有唯一的列吗? @Deb 因为两个数据都是data.table。尝试setDF(A); merge(A, B) 应该可以工作

以上是关于与 data.table 合并数据以重复唯一值的主要内容,如果未能解决你的问题,请参考以下文章

使用“data.table”从重复行中选择非“NA”值——当有多个分组变量时

删除单个单元格中的重复ID

Python / Pandas合并并从逗号分隔的变量/列生成唯一值列表[重复]

Excle如何将多个同ID的值,合并到一个单元格内,并以逗号隔开

怎么将两个EXCEL表格合并后去除重复数据

熊猫计算列中的元素并以重复的方式显示