如何使用R将整数向量有效折叠到序列的data.table中?

Powege

给定一个大向量。例如:

set.seed(1)
in_vec <- sample(1:10000, 5000, replace = F)

如何有效地将其折叠到一个数据表中,该数据表提供所有顺序整数的开始和结束坐标。我目前正在使用以下代码:

in_vec <- sort(in_vec) # sort by sequence
library(data.table)
interval_id <- findInterval(in_vec, in_vec[which(c(1, diff(in_vec)) > 1)]) # add unique IDs for sequences
dt <- data.table(vec = in_vec, # make data.table
             int_id = interval_id)
long_to_short <- function(sub){ data.table(start = sub$vec[1], end = sub$vec[nrow(sub)]) } # custom function
library(plyr)
output <- ddply(dt, "int_id", long_to_short)
output$int_id <- NULL

但是,我将其应用到的向量非常大,因此我需要最大化性能。有data.table方法吗?任何帮助将不胜感激!

油菜

rleid()使用有助于:

library(data.table)

set.seed(1)
dt <- data.table(in_vec = sample(1:10000, 5000, replace = F)) 

dt[order(in_vec), 
   .(start = min(in_vec),
     end = max(in_vec)),
   by = .(grp = rleid(c(0, cumsum(diff(in_vec) > 1))))
   ]

       grp start  end
   1:    1     4    4
   2:    2     6    7
   3:    3    14   16
   4:    4    19   19
   5:    5    26   27
  ---                
2483: 2483  9980 9980
2484: 2484  9988 9988
2485: 2485  9991 9992
2486: 2486  9994 9994
2487: 2487  9997 9998

对于完全基础的解决方案,这应该是性能最高的,因为它不是分组操作:

set.seed(1)
in_vec <- sample(1:10000, 5000, replace = F)
in_vec <- sort(in_vec)

grp <- c(0, cumsum(diff(in_vec) > 1))

data.frame(grp = unique(grp),
           start = in_vec[!duplicated(grp)],
           end = in_vec[!duplicated(grp, fromLast = T)]
)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何最有效地将列设置为data.table中的NA?

来自分类Dev

有效地找到R中的起始和终止向量之间的序列

来自分类Dev

有效使用R data.table和unique()

来自分类Dev

内存有效地将一行插入到data.table对象中?

来自分类Dev

更有效地将匹配列与data.table中的重复项合并

来自分类Dev

更有效地将匹配列与data.table中的重复项合并

来自分类Dev

有效转换为R中的向量

来自分类Dev

在R中有效的data.table中更新一列两次

来自分类Dev

缺少值的R data.table中的有效移位

来自分类Dev

如何在PostgreSQL中有效检查序列中已使用和未使用的值

来自分类Dev

如何在PostgreSQL中有效检查序列中已使用和未使用的值

来自分类Dev

使用字典替换data.table中的值的最有效方法是什么?

来自分类Dev

如何使用python中的列表有效地排序列表列表

来自分类Dev

用来自另一个data.table的相关值替换data.table的列中的向量值的最有效方法是什么?

来自分类Dev

将值四舍五入到R中的特定有效数字

来自分类Dev

将值四舍五入到R中的特定有效数字

来自分类Dev

如何有效处理熊猫中的时间序列数据

来自分类Dev

如何有条件地折叠R data.table中的记录组?

来自分类Dev

如何有效地将宏变量循环到SAS宏功能中

来自分类Dev

如何有效地将CSS值导入到javascript文件中?

来自分类Dev

如何将分离的数据存储到数据库中的最有效方法

来自分类Dev

如何将搜索词捆绑到更有效的查询中?

来自分类Dev

如何有效地将 JavaScript 对象的值隔离到 Array 中?

来自分类Dev

我如何(有效地)将向量添加到Julia中矩阵的每一行?

来自分类Dev

有效地获取C中整数向量的绝对值

来自分类Dev

有效地获取C中整数向量的绝对值

来自分类Dev

我如何最有效地使用PHP将文件中从0x0到0x ***的所有内容拉出?

来自分类Dev

在函数中按引用将新列添加到data.table引用并不总是有效

来自分类Dev

使用data.table对R中的序列求和

Related 相关文章

  1. 1

    如何最有效地将列设置为data.table中的NA?

  2. 2

    有效地找到R中的起始和终止向量之间的序列

  3. 3

    有效使用R data.table和unique()

  4. 4

    内存有效地将一行插入到data.table对象中?

  5. 5

    更有效地将匹配列与data.table中的重复项合并

  6. 6

    更有效地将匹配列与data.table中的重复项合并

  7. 7

    有效转换为R中的向量

  8. 8

    在R中有效的data.table中更新一列两次

  9. 9

    缺少值的R data.table中的有效移位

  10. 10

    如何在PostgreSQL中有效检查序列中已使用和未使用的值

  11. 11

    如何在PostgreSQL中有效检查序列中已使用和未使用的值

  12. 12

    使用字典替换data.table中的值的最有效方法是什么?

  13. 13

    如何使用python中的列表有效地排序列表列表

  14. 14

    用来自另一个data.table的相关值替换data.table的列中的向量值的最有效方法是什么?

  15. 15

    将值四舍五入到R中的特定有效数字

  16. 16

    将值四舍五入到R中的特定有效数字

  17. 17

    如何有效处理熊猫中的时间序列数据

  18. 18

    如何有条件地折叠R data.table中的记录组?

  19. 19

    如何有效地将宏变量循环到SAS宏功能中

  20. 20

    如何有效地将CSS值导入到javascript文件中?

  21. 21

    如何将分离的数据存储到数据库中的最有效方法

  22. 22

    如何将搜索词捆绑到更有效的查询中?

  23. 23

    如何有效地将 JavaScript 对象的值隔离到 Array 中?

  24. 24

    我如何(有效地)将向量添加到Julia中矩阵的每一行?

  25. 25

    有效地获取C中整数向量的绝对值

  26. 26

    有效地获取C中整数向量的绝对值

  27. 27

    我如何最有效地使用PHP将文件中从0x0到0x ***的所有内容拉出?

  28. 28

    在函数中按引用将新列添加到data.table引用并不总是有效

  29. 29

    使用data.table对R中的序列求和

热门标签

归档