【问题标题】:How to get a data-set with only non repeating records from a data-set which contains unique and duplicate records? [duplicate]如何从包含唯一和重复记录的数据集中获取仅包含非重复记录的数据集? [复制]
【发布时间】:2019-12-08 01:56:53
【问题描述】:

“我正在处理一个数据集,并希望将所有非重复记录提取到一个新数据集中。我当前的数据集既有重复记录也有非重复记录。有什么办法只得到唯一记录?

我已经尝试了下面的代码,它给了我所有重复的记录。

unique <- Data[!duplicated(Data),]
NewData <- unique[unique$x %in% unique$x[duplicated(unique$x)],]

例如我采用了以下数据集

x <- c("A","B","B","D","A","C","B","A")
y <- c(1,2,3,4,5,6,7,8)
z <- c(8,7,6,5,4,3,2,1)
Data <- data.frame(x,y,z)

Dataframe:

x y z
A 1 8
B 2 7
B 3 6
D 4 5
A 5 4
C 6 3
B 7 2
A 8 1

我想要的是:

x y z
D 4 5
C 6 3

【问题讨论】:

    标签: python r


    【解决方案1】:

    这是一个基于 R 的替代方案

    > Data[Data$x %in% as.character(unique(Data$x)) [table(Data$x)==1], ]
      x y z
    4 D 4 5
    6 C 6 3
    

    或者使用 dplyr

    Data %>%
      group_by(x) %>%
      filter(n() == 1)
    

    【讨论】:

    • 对于我共享的这个数据集,它完全可以正常工作,但是当我处理不同(更大)的数据集时,它没有提供确切的结果。
    【解决方案2】:

    并使用dplyr

    Data %>% count(x) %>% filter(n==1) %>% left_join(.,Data) %>% select(-n)
    
    Joining, by = "x"
    # A tibble: 2 x 3
      x         y     z
      <fct> <dbl> <dbl>
    1 C         6     3
    2 D         4     5
    

    【讨论】:

    • 您也可以使用add_count,这样您就不必在之后使用join。像这样Data %&gt;% add_count(x) %&gt;% filter(n == 1) %&gt;% select(-n)
    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2021-12-26
    • 2016-06-12
    • 2020-01-19
    相关资源
    最近更新 更多