从上到下删除两个未分组列中的重复项

问题描述 投票:0回答:2

这是一个示例数据框,用于展示我的问题和我想要实现的目标。 这里我有两列,

x
y
,我想从中删除重复项。我还有
z
列,其中包含行的排序排名。

x   y   z
A   BB  8
B   BB  7.5
B   AA  6.2
B   CC  5
C   DD  4

我试图同时查看

x
y
,并且每次任一列中出现重复项时,都删除该行并继续。

我想要的最终结果是这样的

x   y   z
A   BB  8
B   AA  6.2
C   DD  4

BB
列中的第二个
y
已删除。然后,
B - AA
行不会被删除,因为逐行向下,它现在是
B
列中的第一个
x
。这是针对大型数据集的,因此不幸的是我无法手动完成。

我并不是想将这两列组合在一起。我也不想一次删除一列的重复项,因为如果这样做的话,就会删除太多的观察结果。

如何实现这一目标?

r dataframe dplyr duplicates
2个回答
1
投票

迭代

filter
,首先过滤那些具有重复
y
值的值(在没有重复
y
值的值中),然后过滤掉重复的
x
值,适用于您的样本数据。

library(dplyr) 

df %>%
  filter(!duplicated(y)) %>%
  filter(!duplicated(x))

#   x  y   z
# 1 A BB 8.0
# 2 B AA 6.2
# 3 C DD 4.0

0
投票

首先删除第

"y"
列上的重复行,然后删除该结果的第
"x"
列上的重复行。

df1 <- "x   y   z
A   BB  8
B   BB  7.5
B   AA  6.2
B   CC  5
C   DD  4"
df1 <- read.table(text = df1, header = TRUE)

j <- df1$y |> duplicated()
i <- df1$x[!j] |> duplicated()
df1[!j, ][!i, ]
#>   x  y   z
#> 1 A BB 8.0
#> 3 B AA 6.2
#> 5 C DD 4.0

创建于 2023-12-18,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.