我可以更快地执行dplyr + data.table任务吗?

斯蒂芬·亨德森

我想这dplyr不仅仅是一个plyr问题。为了提高速度,我data.table在编写的某些代码中使用了该代码。在中间步骤中,我有一张表,其中包含约32,000行的一些基因组学数据:

> bedbin.dt
Source: local data table [32,138 x 4]
Groups: chr

   bin   start           site chr
1    2 3500000         ssCTCF   1
2    3 4000000 ssCTCF+Cohesin   1
3    3 4000000         ssCTCF   1
4    4 4500000         ucCTCF   1
5    4 4500000 ssCTCF+Cohesin   1
6    4 4500000 ssCTCF+Cohesin   1
7    4 4500000 ssCTCF+Cohesin   1
8    4 4500000         ssCTCF   1
9    4 4500000         ssCTCF   1
10   5 5000000         ssCTCF   1
.. ...     ...            ... ...

编辑

或像这样的前一百行数据(向里卡多·萨波特塔致谢)

bedbin.dt <- data.table(structure(list(bin = c("2", "3", "3", "4", "4", "4", "4", "4","4", "5", "5", "7", "7", "7", "7", "7", "7", "8", "8", "9", "9","11", "12", "14", "14", "14", "14", "14", "14", "14", "14", "15","15", "15", "15", "15", "15", "15", "15", "15", "15", "16", "16","17", "17", "17", "18", "20", "20", "20", "21", "21", "21", "21","21", "21", "21", "21", "21", "21", "22", "22", "5057", "5057","5057", "5057", "5059", "5059", "5059", "5059", "5059", "5060","5060", "5060", "5060", "5060", "5060", "5061", "5063", "5063","5064", "5064", "5064", "5064", "5064", "5064", "5064", "5064","5064", "5064", "5064", "5064", "5064", "5064", "5064", "5064","5064", "5064", "5064", "5064"), start = c(3500000L, 4000000L,4000000L, 4500000L, 4500000L, 4500000L, 4500000L, 4500000L, 4500000L,5000000L, 5000000L, 6000000L, 6000000L, 6000000L, 6000000L, 6000000L,6000000L, 6500000L, 6500000L, 7000000L, 7000000L, 8000000L, 8500000L,9500000L, 9500000L, 9500000L, 9500000L, 9500000L, 9500000L, 9500000L,9500000L, 10000000L, 10000000L, 10000000L, 10000000L, 10000000L,10000000L, 10000000L, 10000000L, 10000000L, 10000000L, 10500000L,10500000L, 11000000L, 11000000L, 11000000L, 11500000L, 12500000L,12500000L, 12500000L, 13000000L, 13000000L, 13000000L, 13000000L,13000000L, 13000000L, 13000000L, 13000000L, 13000000L, 13000000L,13500000L, 13500000L, 162500000L, 162500000L, 162500000L, 162500000L,163500000L, 163500000L, 163500000L, 163500000L, 163500000L, 164000000L,164000000L, 164000000L, 164000000L, 164000000L, 164000000L, 164500000L,165500000L, 165500000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L), site = c("ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin","ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin","ssCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF", "ucCTCF","ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF+Cohesin","ssCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF+Cohesin","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF+Cohesin", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ucCTCF", "ssCTCF","ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF","ucCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF", "ucCTCF","ucCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ucCTCF","ucCTCF", "ssCTCF+Cohesin", "ucCTCF", "ucCTCF", "ucCTCF"), chr = structure(c(1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L), .Label = c("1","10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2","3", "4", "5", "6", "7", "8", "9", "X"), class = "factor")), .Names = c("bin","start", "site", "chr"), sorted = "chr", class = c("data.table","data.frame"), row.names = c(NA, -100L)), key='chr')

结束编辑

接下来,我想创建每一行与其他行的所有可能组合(按chr分组)。这将形成对其他数据的查询(联接),因此我正在考虑最好(也是最简单)进行预计算:

# grouped by chr column
bedbin.dt = group_by(bedbin.dt, chr)

# an outer like function
outerFun= function(dt)
  {
   unique(data.table(
    x=dt[rep(1:nrow(dt),each =nrow(dt)),],
    y=dt[rep.int(1:nrow(dt),times=nrow(dt)),]))
  }

> system.time((outer.bedbin.dt = do(bedbin.dt, outerFun1)))
   user  system elapsed 
 90.607  13.993 105.536

在我看来,这是sloooowwww ......虽然相对比较使用data.frame,或类似基函数by()或者lapply()这是一个相当快了很多。但是,实际上这是我正在测试的一个很小的数据集。

所以...我想知道是否有人对更快版本的externalFun有任何想法???有没有比rep()更快的方法rep.int()

埃迪

正如里卡多指出的那样,听起来您只是想要这样:

bedbin.dt[, CJ(1:.N, 1:.N), by = chr]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以比使用r中不同的Package'dplyr'函数更快地寻找不同的项目吗?

来自分类Dev

可以更快地执行更复杂的循环吗?

来自分类Dev

我的静态方法似乎可以通过重用更快地执行。为什么?它会被缓存吗?

来自分类Dev

我可以更快地找到比数组更多的索引吗?

来自分类Dev

LINQ可以比SQL更快地执行数据库操作吗?

来自分类Dev

Python可以更快地替代字典吗?

来自分类Dev

我可以在不使用文件缓存的情况下更快地复制大文件吗?

来自分类Dev

我可以使用 locate 的功能来更快地找到符号链接吗?

来自分类Dev

我可以更快地制作这个宏/代码吗?(Excel VBA 重复查找器)

来自分类Dev

我可以在不使用文件缓存的情况下更快地复制大文件吗?

来自分类Dev

我可以更快地将我的1D向量转换为2D向量吗?

来自分类Dev

启用优化后,代码可以更快地运行一个数量级。我想念什么吗?

来自分类Dev

UWP应用程序可以更快地加载图像吗?

来自分类Dev

用C可以更快地计算RMS值吗?

来自分类Dev

可以用numpy更快地完成吗?

来自分类Dev

BeautifulSoup需要永远,这可以更快地完成吗?

来自分类Dev

是否可以使用data.table完成SQL非等额联接任务(以下示例)(更快和/或更整洁)?

来自分类Dev

我可以使用R data.table连接功能来选择行并执行一些操作吗?

来自分类Dev

gulp任务可以组合得更快吗?

来自分类Dev

gulp任务可以组合得更快吗?

来自分类Dev

我可以更改根路径来执行cron任务吗?

来自分类Dev

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

来自分类Dev

如何使用data.table和lubridate更快地按组计算(日期)排名?

来自分类Dev

如何更快地按组计算CJ?(data.table的交叉联接)

来自分类Dev

R使用data.table通过整个组更快地创建滞后的方法

来自分类Dev

是否可以使 data.table 代码更快?

来自分类Dev

如果我使用byte而不是int,我的循环会更快地迭代吗?

来自分类Dev

如果我使用byte而不是int,我的循环会更快地迭代吗?

来自分类Dev

我可以以编程方式更新data.table中一组列的类型(对因数)吗?

Related 相关文章

  1. 1

    我可以比使用r中不同的Package'dplyr'函数更快地寻找不同的项目吗?

  2. 2

    可以更快地执行更复杂的循环吗?

  3. 3

    我的静态方法似乎可以通过重用更快地执行。为什么?它会被缓存吗?

  4. 4

    我可以更快地找到比数组更多的索引吗?

  5. 5

    LINQ可以比SQL更快地执行数据库操作吗?

  6. 6

    Python可以更快地替代字典吗?

  7. 7

    我可以在不使用文件缓存的情况下更快地复制大文件吗?

  8. 8

    我可以使用 locate 的功能来更快地找到符号链接吗?

  9. 9

    我可以更快地制作这个宏/代码吗?(Excel VBA 重复查找器)

  10. 10

    我可以在不使用文件缓存的情况下更快地复制大文件吗?

  11. 11

    我可以更快地将我的1D向量转换为2D向量吗?

  12. 12

    启用优化后,代码可以更快地运行一个数量级。我想念什么吗?

  13. 13

    UWP应用程序可以更快地加载图像吗?

  14. 14

    用C可以更快地计算RMS值吗?

  15. 15

    可以用numpy更快地完成吗?

  16. 16

    BeautifulSoup需要永远,这可以更快地完成吗?

  17. 17

    是否可以使用data.table完成SQL非等额联接任务(以下示例)(更快和/或更整洁)?

  18. 18

    我可以使用R data.table连接功能来选择行并执行一些操作吗?

  19. 19

    gulp任务可以组合得更快吗?

  20. 20

    gulp任务可以组合得更快吗?

  21. 21

    我可以更改根路径来执行cron任务吗?

  22. 22

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

  23. 23

    如何使用data.table和lubridate更快地按组计算(日期)排名?

  24. 24

    如何更快地按组计算CJ?(data.table的交叉联接)

  25. 25

    R使用data.table通过整个组更快地创建滞后的方法

  26. 26

    是否可以使 data.table 代码更快?

  27. 27

    如果我使用byte而不是int,我的循环会更快地迭代吗?

  28. 28

    如果我使用byte而不是int,我的循环会更快地迭代吗?

  29. 29

    我可以以编程方式更新data.table中一组列的类型(对因数)吗?

热门标签

归档