Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以比在r中使用包'dplyr'函数distinct更快地查找不同的项?_R_Algorithm_Dataframe - Fatal编程技术网

我是否可以比在r中使用包'dplyr'函数distinct更快地查找不同的项?

我是否可以比在r中使用包'dplyr'函数distinct更快地查找不同的项?,r,algorithm,dataframe,R,Algorithm,Dataframe,我目前正在尝试使用两个列的唯一值按行筛选data.frame,这两个列分别是gene_name和UMI。我正在使用dplyr包中的distinct函数来实现这一点。当我的列表很短时,代码运行得非常快,但是当data.frame非常大,大约有1亿行时,程序似乎要永远运行下去。有没有更有效的方法来解决这个问题 以下是我目前正在做的事情这只是一个较大程序的片段: df <- read.delim("hash_test.txt") df = arrange(df, Gene) filter_umi

我目前正在尝试使用两个列的唯一值按行筛选data.frame,这两个列分别是gene_name和UMI。我正在使用dplyr包中的distinct函数来实现这一点。当我的列表很短时,代码运行得非常快,但是当data.frame非常大,大约有1亿行时,程序似乎要永远运行下去。有没有更有效的方法来解决这个问题

以下是我目前正在做的事情这只是一个较大程序的片段:

df <- read.delim("hash_test.txt")
df = arrange(df, Gene)
filter_umis = df %>% distinct(Gene, UMI)
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"))
这是因为data.table可以看到我们希望从第一个i参数中子集的行,以及我们希望事先从第二个j参数中选择的列,并且不会不必要地实现任何其他列


基因应该是基因吗?你也考虑过@MichaelChirico吗?我想是这样的,我只是在一个中等大小的数据集上运行了它,速度是它的两倍。我将在更大的数据集上运行它,并将返回给您。谢谢大家!@使用setkey对数据集进行排序后,速度可能会快很多。@lukeA setkey需要1。计算顺序,和2。对RAM中的数据重新排序。在这里,重新排序是不必要的,应该避免。。i、 例如,直接使用unique IMHO会/应该更有效。如新的小插曲中所述,按键有利于重复操作。
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"))
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