如何子集您的数据框以仅保留第一个重复项?

时间:2018-08-27 11:48:55

标签: r duplicates subset

我有一个带有多个变量的数据框,并且我对如何对其进行子集感兴趣,以便仅包含第一个重复项。

    >head(occurrence)
    userId        occurrence  profile.birthday profile.gender postDate count
    1 100469891698         6               47         Female 583 days     0
    2 100469891698         6               47         Female  55 days     0
    3 100469891698         6               47         Female 481 days     0
    4 100469891698         6               47         Female 583 days     0
    5 100469891698         6               47         Female 583 days     0
    6 100469891698         6               47         Female 583 days     0

在这里您可以看到数据框。 “出现次数”列计算出同一userId发生了多少次。我尝试使用以下代码删除重复项:

    occurrence <- occurrence[!duplicated(occurrence$userId),]

但是,它以这种方式删除“随机”重复项。我想保留postDate最早的数据。因此,例如第一行应如下所示:

   userId        occurrence  profile.birthday profile.gender postDate count
  1 100469891698         6               47         Female 583 days     0

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以为此使用dplyr,并在最大postDate上进行过滤后,使用一个独特的(唯一的)来删除所有重复的行。当然,如果最大postDate的行中存在差异,您将获得所有这些记录。

occurrence <- occurrence %>% 
  group_by(userId) %>% 
  filter(postDate == max(postDate)) %>% 
  distinct

  occurence
# A tibble: 1 x 6
# Groups:   userId [1]
        userId occurrence profile.birthday profile.gender postDate count
         <dbl>      <int>            <int> <chr>          <chr>    <int>
1 100469891698          6               47 Female         583 days     0

答案 1 :(得分:1)

您是否先尝试过这样订购:

occurrence <- occurrence[order(occurrence$userId, occurrence$postDate, decreasing=TRUE),]
occurrenceClean <- occurrence[!duplicated(occurrence$userId),]
occurrenceClean