我有一个数据框,其尺寸为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'”。 我想要一个只包含唯一序列和名称的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,]}}
再次这太慢了! 有没有更快的方法在数据框的一列中找到唯一值?
答案 0 :(得分:2)
data[!duplicated(data$Seq), ]
应该这样做。
答案 1 :(得分:1)
为了最快,您可以尝试:
data[!kit::fduplicated(data$Seq), ]
以下是一些直接取自文档的基准:
x = sample(c(1:10,NA_integer_),1e8,TRUE) # 382 Mb
microbenchmark::microbenchmark(
duplicated(x),
fduplicated(x),
times = 5L
)
# Unit: seconds
# expr min lq mean median uq max neval
# duplicated(x) 2.21 2.21 2.48 2.21 2.22 3.55 5
# fduplicated(x) 0.38 0.39 0.45 0.48 0.49 0.50 5
kit
也有一个 funique
函数。
答案 2 :(得分:0)
library(dplyr)
data %>% distinct
应该值得,特别是如果您的数据对于计算机而言太大时。