gpt4 book ai didi

r - 我可以比使用 r 中不同的包 ‘dplyr’ 函数更快地查找不同的项目吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:17 24 4
gpt4 key购买 nike

我目前正在尝试通过我的两列(gene_name 和 UMI)中具有唯一值的行来过滤我的 data.frame。我正在使用 dplyr 包中的 distinct 函数来执行此操作。当我的列表很短时,代码运行得非常快,但是当 data.frame 非常大,有 1 亿行左右时,程序似乎永远运行。有没有更有效的方法来解决这个问题?

这是我目前正在做的事情(这只是一个更大程序的片段):

df <- read.delim("hash_test.txt")
df = arrange(df, Gene)
filter_umis = df %>% distinct(Gene, UMI)

这是我用来测试的一些示例数据。实际数据要大得多:

LN.Tfr.1    LN.Tfr.2    LN.Tfr.3    Gene    UMI
27.129 25.324 19.49333333 Tubgcp6 GCCC
8.887 8.886 5.924333333 Tubgcp6 GCCC
4.21 14.661 9.017 Uba52 GTTT
40.693 12.884 22.59466667 Ube2d2 GCAC
1.871 2.221 1.364 Ube2d3 GCAG

最佳答案

data.table 中的

unique 可能是更快的替代方案。

library(data.table)
setDT(df) # converts data.frame to data.table *without* copying
out <- unique(df, by = c("genes", "umi"))
# alternatively in one go:
out = unique(setDT(df), by = c("genes", "umi"))

如果您只想选择一些列,那么使用如下所示的 duplicated() 会稍微更有效率:

setDT(df)
out = df[!duplicated(df, by = c("genes", "umi")), select_cols, with = FALSE]
# select_cols is a character vector of column names to be in result

这是因为 data.table 看到了我们想要从第一个 i 参数中子集化的行,以及我们想要从第二个 中选择的列code>j 参数 预先,并且不会不必要地实现任何其他列。

See here for more on data.table.

关于r - 我可以比使用 r 中不同的包 ‘dplyr’ 函数更快地查找不同的项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com