【问题标题】:R Joining with data.tableR加入data.table
【发布时间】:2017-12-04 15:49:20
【问题描述】:

我正在尝试在 x$val >= y$start & x$val

data.table 确实有不等式连接,但我一生都无法弄清楚语法是如何工作的。看到这个结果:

x <- data.table(val = c(1:5), id = "a")
y <- data.table(start = c(1:5), end = c(11:15), id= "a")

x[y, on=c("val>=start","val<=end"),
  .(start, val, end)]

    start val end
 1:     1   1  11
 2:     1   1  11
 3:     1   1  11
 4:     1   1  11
 5:     1   1  11
 6:     2   2  12
 7:     2   2  12
 8:     2   2  12
 9:     2   2  12
10:     3   3  13
11:     3   3  13
12:     3   3  13
13:     4   4  14
14:     4   4  14
15:     5   5  15

为了展示我期望得到的结果,这里是 dplyr 产生的:

x <- data.table(val = c(1:5), id = "a")
y <- data.table(start = c(1:5), end = c(11:15), id= "a")

x %>% 
  inner_join(y) %>% 
  filter(val >= start & val <= end)

   val   id start end
1    1    a     1  11
2    2    a     1  11
3    2    a     2  12
4    3    a     1  11
5    3    a     2  12
6    3    a     3  13
7    4    a     1  11
8    4    a     2  12
9    4    a     3  13
10   4    a     4  14
11   5    a     1  11
12   5    a     2  12
13   5    a     3  13
14   5    a     4  14
15   5    a     5  15

谁能解释我在 data.table 语法中缺少什么?

【问题讨论】:

    标签: r join dplyr data.table


    【解决方案1】:

    您需要从左表中选择val列,前缀为(x.);更多信息请见this answer

    x[y, on=.(val >= start, val <= end), .(val = x.val, id, start, end)][order(val)]
     #                                           ^^
     #   val id start end
     #1:   1  a     1  11
     #2:   2  a     1  11
     #3:   2  a     2  12
     #4:   3  a     1  11
     #5:   3  a     2  12
     #6:   3  a     3  13
     #7:   4  a     1  11
     #8:   4  a     2  12
     #9:   4  a     3  13
    #10:   4  a     4  14
    #11:   5  a     1  11
    #12:   5  a     2  12
    #13:   5  a     3  13
    #14:   5  a     4  14
    #15:   5  a     5  15
    

    【讨论】:

    • 哇,我明白了,但这真的很混乱!谢谢。
    • 是的,这是令人困惑的行为,希望尽快得到修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多