dplyr: unique和distinct的区别

4

似乎使用distinct与unique时,结果行数不同。我正在处理的数据集非常庞大。希望代码容易理解。

dt2a <- select(dt, mutation.genome.position, 
  mutation.cds, primary.site, sample.name, mutation.id) %>%
  group_by(mutation.genome.position, mutation.cds, primary.site) %>% 
  mutate(occ = nrow(.)) %>%
  select(-sample.name) %>% distinct()
dim(dt2a)
[1] 2316382       5

## Using unique instead
dt2b <- select(dt, mutation.genome.position, mutation.cds, 
   primary.site, sample.name, mutation.id) %>%
  group_by(mutation.genome.position, mutation.cds, primary.site) %>%
  mutate(occ = nrow(.)) %>%
  select(-sample.name) %>% unique()
dim(dt2b)
[1] 2837982       5

这是我正在处理的文件:
sftp://sftp-cancer.sanger.ac.uk/files/grch38/cosmic/v72/CosmicMutantExport.tsv.gz
     dt = fread(fl)

4
需要一些工作,但提供一个小的可重现的示例会更好。 - Frank
对于小数据集,两者都给出了相同的答案。 - Sahil Seth
1个回答

11

这似乎是group_by的结果,请看这个案例。

dt<-data.frame(g=rep(c("a","b"), each=3),
    v=c(2,2,5,2,7,7))

dt %>% group_by(g) %>% unique()
# Source: local data frame [4 x 2]
# Groups: g
# 
#   g v
# 1 a 2
# 2 a 5
# 3 b 2
# 4 b 7

dt %>% group_by(g) %>% distinct()
# Source: local data frame [2 x 2]
# Groups: g
# 
#   g v
# 1 a 2
# 2 b 2

dt %>% group_by(g) %>% distinct(v)
# Source: local data frame [4 x 2]
# Groups: g
# 
#   g v
# 1 a 2
# 2 a 5
# 3 b 2
# 4 b 7

如果您在不指定要使哪些变量不同的情况下使用distinct(),则它似乎使用分组变量。


是的,这很有道理。 - Sahil Seth
1
@MrFlick 这是一个 dplyr 的开放问题 - Henrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接