首页 > 解决方案 > 根据 R 中另一列中的重复值删除一列中的行(删除特定的原始数据)

问题描述

在我的数据集中,我有两列。POINT:仅包含在整个数据集中重复的两个分类值“随机”和“当前”。ID:包含一组与 POINT 中的值关联的 5 位连续值。ID 中的某些值是重复的。

当与“当前”相比,POINT 值为“随机”时,我无法找出 R 中的代码来仅消除 ID 列中具有重复值的原始数据。所以我想要下面的数据集:

观点 ID
当前的 45905
当前的 40817
当前的 55936
当前的 66608
当前的 66608
随机的 45905
随机的 40817
随机的 55936
随机的 66608
随机的 44456

看起来像这样:

观点 ID
当前的 45905
当前的 40817
当前的 55936
当前的 66608
当前的 66608
随机的 44456

标签: rduplicates

解决方案


可以dpylr这样实现:

  1. 拆分您的数据POINT
  2. 使用anti_join
  3. 将过滤后的随机数据集 Rowbind 到当前数据集。
d <- data.frame(
  stringsAsFactors = FALSE,
             POINT = c("Current","Current","Current",
                       "Current","Current","Random","Random","Random",
                       "Random","Random"),
                ID = c(45905L,40817L,55936L,66608L,
                       66608L,45905L,40817L,55936L,66608L,44456L)
)

d_split <- split(d, d$POINT)

library(dplyr)

random_keep <- dplyr::anti_join(d_split$Random, d_split$Current, by = "ID")
d_final <- dplyr::bind_rows(d_split$Current, random_keep)

head(d_final)
#>     POINT    ID
#> 1 Current 45905
#> 2 Current 40817
#> 3 Current 55936
#> 4 Current 66608
#> 5 Current 66608
#> 6  Random 44456

推荐阅读