与 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 forby
is required" 。这是因为没有唯一的列吗?
@Deb 因为两个数据都是data.table
。尝试setDF(A); merge(A, B)
应该可以工作以上是关于与 data.table 合并数据以重复唯一值的主要内容,如果未能解决你的问题,请参考以下文章
使用“data.table”从重复行中选择非“NA”值——当有多个分组变量时
Python / Pandas合并并从逗号分隔的变量/列生成唯一值列表[重复]