【问题标题】:subset data.table based on separate data.table [duplicate]基于单独的data.table的子集data.table [重复]
【发布时间】:2020-04-16 04:39:04
【问题描述】:

我有一个主表

library(data.table); set.seed(42)
D1 <- data.table(id=rep(1:3,each=2), name=rep(c("a","b")), val=runif(6,0,1))
> D1
   id name       val
1:  1    a 0.9148060
2:  1    b 0.9370754
3:  2    a 0.2861395
4:  2    b 0.8304476
5:  3    a 0.6417455
6:  3    b 0.5190959

为每个id 赋予两个值,分别命名为ab。我要选择的值在辅助表中确定

D2 <- data.table(id=1:3, name=c("a","a","b"))

我想使用D2D1 进行子集化。我可以在循环中按 ID 执行此 ID,但考虑到我的数据维度,我希望有一个更有效的解决方案,也许使用连接。

【问题讨论】:

    标签: r join data.table subset


    【解决方案1】:

    我们可以使用连接,它会更快,因为我们已经有 data.table 对象

    D1[D2, on = .(id, name)]
    #  id name       val
    #1:  1    a 0.9148060
    #2:  2    a 0.2861395
    #3:  3    b 0.5190959
    

    或与inner_join 来自dplyr

    library(dplyr)
    inner_join(D1, D2)
    

    或者在base R中使用match

    D2$val <- D1$val[match(paste(D2$id, D2$name), paste(D1$id, D1$name))]
    

    【讨论】:

      【解决方案2】:

      基本 R 解决方案是通过使用 merge(),即,

      > merge(D2,D1)
         id name       val
      1:  1    a 0.9148060
      2:  2    a 0.2861395
      3:  3    b 0.5190959
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-19
        • 2014-01-04
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多