• R语言
  • R中如何实现去除重复数据?

一列数据有几百万个,如何去掉多余重复的(重复的只保留一个),得到没有重复数据的序列?
前面有相似的帖子



?duplicated



unique对于一个向量管用,对于matrix、data frame那些就不管用了。
3 年 后

>names(sourcedata) <- "Date" "A" "B" "k1" "k2"<br />
>smp <- sourcedata[!duplicated(data.frame(sourcedata$A,sourcedata$B)),]
</p>

>names(sourcedata) <- "Date" "A" "B" "k1" "k2"<br />
>smp <- subset[sourcedata,!duplicated(sourcedata$A,sourcedata$B),]
</p>

试了以上两个写法都行不通,我想要去除掉数据中重复的A和B,结果还是一样出现重复数据,请问该怎么删除掉双重条件的重复元素呢?


  • ryo 回复了此帖

    回复 第4楼 的 ryusukekenji:

    你的意思是 如果A字段和B字段都重复的话 就要去重?

    但是 如果A字段和B字段都重复的话 你保留那一行数据呢

    你显然没有搞明白duplicated的用法

    回复 第5楼 的 ypchen:

    参考了这个网址,http://tolstoy.newcastle.edu.au/R/e8/help/09/12/8736.html,觉得有点不对劲。

    是啊,头痛啊。duplicated好像只能过滤掉单列条件,真的不太明白该怎么用duplicated。版主可以大略讲解吗?

    >smp <- na.omit(sourcedata[which(data.frame(sourcedata$A,sourcedata$B) != duplicated(data.frame(sourcedata$A,sourcedata$B))),])
    </p>

    试一下使用which也一样,问题出在不明白duplicated怎么用。版主可以赐教吗?

    回复 第6楼 的 ryusukekenji:

    我还是不明白你想做什么 你到底想实现什么效果 可以赐教吗?

    4 年 后

    回复 第3楼 的 谢益辉:

    是不是现在的unique可以对数据框等去重了?

    dim(iris)

    dim(unique(iris))

    我试了试,貌似可以。

    回复 第8楼 的 512002855:

    <br />
    methods("unique")<br />
    
    </p>
    10 个月 后
    若source中1、2列数据完全相同 则删除此行,代码实现:
    index1<-duplicated(source[,1])
    index2=duplicated(source[,2])
    index=index1 & index2
    source2=source[!index,]
      8 天 后
      使用unique函数去除数据框中完全重复观测行,试过可以用。去除指定列重复的还没试
      4 天 后
      [未知用户]

      用unique函数就可以去重,包括行重复和列重复
      3 年 后

      lkifish 这个方法不行啊,我试了一下。当两列数据有a,b和b,a时,做索引,两个都是false,怎么能去重呢?如果是如下的这种例子怎么弄呢?
      first last
      1 q e
      2 a b
      3 o e
      4 b a
      5 c h
      6 x x

      2 年 后

      colorado Hello. 麻烦问一下你这个代码里,两列指定数据相同的情况下,其他列信息不同,那么默认被删除的是哪些行?

        zhouwei 查看 fromLast

        a <- c(1, 2, 2, 4, 4)
        b <- c("a", "b", "c", "d", "e")
        df <- data.frame(a = a, b = b)
        df[duplicated(df$a, fromLast = F), ]
        df[duplicated(df$a, fromLast = T), ]

        dplyr::distinct()会比较好用