【问题标题】:Get list of unique values across multiple columns using data.table使用 data.table 获取跨多个列的唯一值列表
【发布时间】:2019-10-29 07:53:48
【问题描述】:

我想获取跨多个数字 id 列的唯一数字 id 值列表。我的目标是帮助总结数据库中跨用户更改多个表的更改流程,在我的示例中,从表 A 到 B 然后返回到 A。

我知道我可以通过附加每列的列表来做到这一点,但如果可能的话,我想利用 data.table internal 来提高效率。

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

wanted:具有唯一值的向量或 data.table,例如 c(1,2,3,4)

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    这行得通吗?

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

    如果你不想要NAs:

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

    【讨论】:

    • 谢谢 - 是的,我没有意识到你可以在不以这种方式给出列名的情况下融化,很好的解决方案
    • 另一种不熔化的选择:dt_after_update[, unique(unlist(lapply(.SD, unique)))]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多