使用data.table获取跨多列的唯一值列表

时间:2019-06-14 16:38:13

标签: r data.table

我想获得多个数字ID列中唯一数字ID值的列表。我的目标是帮助总结跨用户更改多个表的数据库中数据库的更改流,在我的示例中,从表A到B再到表A。

我知道我可以通过添加每列的列表来做到这一点,但是我想尽可能利用data.table内部来提高效率。

set.seed(1)
dt <- data.table(tbl_A_create_uid=sample(1:2),
                 tbl_A_update_uid=sample(1:4))
dt[,tbl_B_create_uid:=tbl_A_update_uid]
dt[,tbl_B_update_uid:=sample(1:4)]
dt_after_update<-rbind(dt,data.table(tbl_A_create_uid=dt[,tbl_B_update_uid])
                       ,use.names=TRUE
                       ,fill=TRUE
                       )
dt_after_update
# > dt_after_update
#    tbl_A_create_uid tbl_A_update_uid tbl_B_create_uid tbl_B_update_uid
# 1:                1                3                3                4
# 2:                2                4                4                2
# 3:                1                1                1                3
# 4:                2                2                2                1
# 5:                4               NA               NA               NA
# 6:                2               NA               NA               NA
# 7:                3               NA               NA               NA
# 8:                1               NA               NA               NA

需要:具有唯一值(例如c(1,2,3,4)

的向量或数据表)

1 个答案:

答案 0 :(得分:2)

这项工作可以吗?

melt(dt_after_update)[, unique(value)] #ignore the warning

如果您不希望使用NA

melt(dt_after_update)[!is.na(value), unique(value)] #ignore the warning