给定每个组的行索引,对data.table进行子集

SymbolixAU

这似乎是一个琐碎的问题,我似乎找不到以下解决方案:

考虑两个 data.tables

library(data.table)
dt <- data.table(id = c(1,1,1,2,2,2),
                 val = c(10,20,30,10,20,30))

dt1 <- data.table(id = c(1,2),
                  V1 = c(2,1))

如何子集化dt,哪里可以dt1告诉我需要子集V1化的分组的行号(id

例如,这里的结果将是

#    id val
# 1:  1  20
# 2:  2  10

更新

对建议的解决方案进行快速基准测试

library(data.table)
s <- 100000
set.seed(123)
dt <- data.table(id = rep(seq(1:s), each=10),
                 val = rnorm(n = s*10, 0, 1))

dt1 <- data.table(id = seq(1:s),
                  V1 = sample(1:10, s, replace=T))


library(microbenchmark)

microbenchmark(

  akrun = { dt[dt1, on='id'][, .SD[1:.N==V1] ,id] },

  david = { dt[dt1, val[i.V1], on = 'id', by = .EACHI] },

  symbolix = { dt[, id_seq := seq(1:.N), by=id][dt1, on=c(id_seq = "V1", "id") , nomatch=0] },

   times = 5

 )
#Unit: milliseconds
#     expr         min          lq        mean      median          uq         max neval
#    akrun 17809.51370 17887.89037 18005.32357 18043.80279 18130.78978 18154.62118     5
#    david    48.17367    53.76436    53.79004    54.69096    55.59657    56.72467     5
 #symbolix   507.67312   511.23492   562.59743   571.31160   579.61228   643.15525     5
大卫·阿伦堡(David Arenburg)

另一种选择是在点播时使用by = .EACHI以进行子集val

dt[dt1, val[i.V1], on = 'id', by = .EACHI]
#    id V1
# 1:  1 20
# 2:  2 10

如果那里有更多列,则可以.SD[i.V1]改用。


附带说明一下,在data.table v> = 1.9.8中,该.SD[val]操作计划为完全优化以使用GForce,因此请耐心等待。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用data.table为组的每个元素创建一个“索引”

来自分类Dev

从python中的列表子集进行布尔索引

来自分类Dev

R data.table循环子集按因子进行lm()

来自分类Dev

利用二进制搜索按范围对data.table进行子集化

来自分类Dev

通过在data.table中按时间间隔进行逻辑子集定义变量

来自分类Dev

箱线图:按每个组的子集的平均值对组进行排序

来自分类Dev

使用grep对data.table中的子集行进行比较,比较行内容

来自分类Dev

在data.table中使用grep进行子集化-unpredicatble

来自分类Dev

给定每个组的行索引,对data.table进行子集

来自分类Dev

如何基于特定列号中的值对data.table进行子集

来自分类Dev

将巨大的稀疏矩阵转换为data.table以在R中更快地进行子集

来自分类Dev

通过匹配另一个data.table的列来对data.table进行子集

来自分类Dev

如何在不自动对行进行排序的情况下调用data.table的基于列的子集?

来自分类Dev

r data.table:在for循环中通过引用进行子集和赋值

来自分类Dev

.SD列上的data.table子集条件?

来自分类Dev

在R中按组条件进行子集

来自分类Dev

子集data.table表示对象的连接

来自分类Dev

通过在两列中按范围进行二进制搜索来为data.table子集

来自分类Dev

给定一组索引,在数据框中的每个索引之间进行汇总

来自分类Dev

R data.table循环子集按因子进行lm()

来自分类Dev

使用二进制搜索按范围对data.table进行子集化

来自分类Dev

如何按行对子集进行子集化?

来自分类Dev

如何按索引对矩阵进行子集

来自分类Dev

data.table:删除给定索引值的重复行子集

来自分类Dev

通过子字符串向量对data.table进行子集

来自分类Dev

如何使用dplyr按组进行子集

来自分类Dev

根据行值对列进行子集

来自分类Dev

r中的data.table:使用列索引的子集

来自分类Dev

根据给定行中的观察选择 data.table 列的子集

Related 相关文章

  1. 1

    使用data.table为组的每个元素创建一个“索引”

  2. 2

    从python中的列表子集进行布尔索引

  3. 3

    R data.table循环子集按因子进行lm()

  4. 4

    利用二进制搜索按范围对data.table进行子集化

  5. 5

    通过在data.table中按时间间隔进行逻辑子集定义变量

  6. 6

    箱线图:按每个组的子集的平均值对组进行排序

  7. 7

    使用grep对data.table中的子集行进行比较,比较行内容

  8. 8

    在data.table中使用grep进行子集化-unpredicatble

  9. 9

    给定每个组的行索引,对data.table进行子集

  10. 10

    如何基于特定列号中的值对data.table进行子集

  11. 11

    将巨大的稀疏矩阵转换为data.table以在R中更快地进行子集

  12. 12

    通过匹配另一个data.table的列来对data.table进行子集

  13. 13

    如何在不自动对行进行排序的情况下调用data.table的基于列的子集?

  14. 14

    r data.table:在for循环中通过引用进行子集和赋值

  15. 15

    .SD列上的data.table子集条件?

  16. 16

    在R中按组条件进行子集

  17. 17

    子集data.table表示对象的连接

  18. 18

    通过在两列中按范围进行二进制搜索来为data.table子集

  19. 19

    给定一组索引,在数据框中的每个索引之间进行汇总

  20. 20

    R data.table循环子集按因子进行lm()

  21. 21

    使用二进制搜索按范围对data.table进行子集化

  22. 22

    如何按行对子集进行子集化?

  23. 23

    如何按索引对矩阵进行子集

  24. 24

    data.table:删除给定索引值的重复行子集

  25. 25

    通过子字符串向量对data.table进行子集

  26. 26

    如何使用dplyr按组进行子集

  27. 27

    根据行值对列进行子集

  28. 28

    r中的data.table:使用列索引的子集

  29. 29

    根据给定行中的观察选择 data.table 列的子集

热门标签

归档