将单个变量加入r data.table中的多个变量

时间:2016-07-26 09:12:10

标签: r data.table

DT1保存所有ID的映射,DT2保存ID之间的关系。

我希望将DT1中的映射直接加入DT2中的两个ID。

以下示例数据集:

# Join a mapping to multiple variables.
library(data.table)

# Dataset with mappings.
set.seed(1)
dt1 <- data.table(id=1:10,
                  group=sample(letters[1:4], 10, replace=TRUE))

# > dt1
#     id group
#  1:  1     b
#  2:  2     b
#  3:  3     c
#  4:  4     d
#  5:  5     a
#  6:  6     d
#  7:  7     d
#  8:  8     c
#  9:  9     c
# 10: 10     a

# Dataset with relationship between IDs.
dt2 <- data.table(id1=1:5,
                  id2=6:10)

# > dt2
#    id1 id2
# 1:   1   6
# 2:   2   7
# 3:   3   8
# 4:   4   9
# 5:   5  10

我当然可以使用两个连接,首先是ID1,然后是ID2。实现我想要的另一种方法是首先熔化DT2,所以在加入之前所有ID值都是单个变量......

# Now melt, join group variable of DT1 to DT2, then cast again to obtain
# original structure.
dt2[, i := .I] # need an observation ID
dt2Long <- melt(dt2, id="i")
setkey(dt2Long, value)
dcast(dt2Long[dt1], i ~ variable, value.var=c("value", "group"))

#    i value_id1 value_id2 group_id1 group_id2
# 1: 1         1         6         b         d
# 2: 2         2         7         b         d
# 3: 3         3         8         c         c
# 4: 4         4         9         d         c
# 5: 5         5        10         a         a

这给出了期望的结果,但我想知道是否可能出现以下内容(即将单个变量与两个变量合并)?

setkey(dt1, id)
dt1[dt2, on=c("id1", "id2")]

0 个答案:

没有答案