这是一个示例数据框,用于展示我的问题和我想要实现的目标。 这里我有两列,
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
。这是针对大型数据集的,因此不幸的是我无法手动完成。
我并不是想将这两列组合在一起。我也不想一次删除一列的重复项,因为如果这样做的话,就会删除太多的观察结果。
如何实现这一目标?
迭代
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
首先删除第
"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