我有一个数据框,它有2377426行2列,大致看起来像这样:
Name Seq
428293 ENSE00001892940:ENSE00001929862 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
431857 ENSE00001892940:ENSE00001883352 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGAAGTAAATGAGCTGATGGAAGAGC
432253 ENSE00001892940:ENSE00003623668 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGAAGTAAATGAGCTGATGGAAGAGC
436213 ENSE00001892940:ENSE00003534967 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGAAGTAAATGAGCTGATGGAAGAGC
429778 ENSE00001892940:ENSE00002409454 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAGCTGGGAACCTTTGCTCAAAGCTCC
431263 ENSE00001892940:ENSE00001834214 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAGCTGGGAACCTTTGCTCAAAGCTCC
第一列(名称)中的所有值都是唯一的,但在“Seq”列中有许多重复项。我需要一个数据框,其中仅包含唯一序列和名称。我尝试过使用unique函数,但速度太慢了。我还尝试过对数据库进行排序,并使用以下代码:
dat_sorted = data[order(data$Seq),]
m = dat_sorted[1,]
x =1;for(i in 1:length(dat_sorted[,1])){if(dat_sorted[i,2]!=m[x,2]){x=x+1;m[x,]=dat_sorted[i,]}}
再次强调,这样太慢了!有没有更快的方法来查找数据框中一列中的唯一值?
?unique
函数吗?还可以查看?duplicated
。 - talatunique
应该非常高效,可以尝试使用dplyr
或data.table
中的distinct
或者是unique
。例如:library(data.table); unique(setDT(data), by = "Seq")
或者是setDT(data)[!duplicated(Seq)]
。 - David Arenburgdata %>% group_by(Seq) %>% distinct()
。还可以参考类似的问题http://stackoverflow.com/questions/27255065/removing-duplicates-for-each-id/27255441#27255441。 - talatunique
和dplyr::distinct
,结果distinct
要快得多,仅需几分之一秒的时间。 - mal