如何对数据框进行子集化以仅保留第一个重复项?

eag*_*ent 5 r subset duplicates

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

    >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
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到数据框。'occurrence' 列计算同一个 userId 出现的次数。我尝试了以下代码来删除重复项:

    occurrence <- occurrence[!duplicated(occurrence$userId),]
Run Code Online (Sandbox Code Playgroud)

但是,通过这种方式它可以删除“随机”重复项。我想保留 postDate 最旧的数据。例如,第一行应该是这样的:

   userId        occurrence  profile.birthday profile.gender postDate count
  1 100469891698         6               47         Female 583 days     0
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

小智 5

您是否尝试先这样订购:

occurrence <- occurrence[order(occurrence$userId, occurrence$postDate, decreasing=TRUE),]
occurrenceClean <- occurrence[!duplicated(occurrence$userId),]
occurrenceClean
Run Code Online (Sandbox Code Playgroud)


phi*_*ver 4

您可以使用 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
Run Code Online (Sandbox Code Playgroud)