【发布时间】:2014-12-03 09:04:57
【问题描述】:
我有一个 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
第一列(名称)中的所有值都是唯一的,但在“序列”列中有许多重复项。 我想要一个仅包含唯一序列和名称的 data.frame。我尝试过独特的,但这太慢了。我也尝试过订购数据库并使用以下代码:
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,]}}
再一次,这太慢了! 有没有更快的方法在数据框的一列中找到唯一值?
【问题讨论】:
-
你知道R中有一个
?unique函数吗?另请查看?duplicated。 -
@beginneR,我想他提到他尝试过
unique -
unique应该非常高效,可以尝试distinctfromdplyrordata.tableuniqueas inlibrary(data.table); unique(setDT(data), by = "Seq")orsetDT(data)[!duplicated(Seq)] -
dplyr 版本为
data %>% group_by(Seq) %>% distinct()。另请参阅此类似问题stackoverflow.com/questions/27255065/… -
对于它的价值,我刚刚在大约 310 万行的数据帧上比较了
unique和dplyr::distinct,distinct快得多 - 几十秒到1 的分数。
标签: r performance search unique