在删除一列中重复的行时,是否可以根据第二列和第三列优先保留重复的行之一?
考虑以下示例:
# Example dataframe.
df <- data.frame(col.1 = c(1, 1, 1, 2, 2, 2, 3, 3),
col.2 = c('a', 'b', 'b', 'a', 'b', 'c', 'a', 'a'),
col.3 = c('b', 'c', 'a', 'b', 'a', 'b', 'c', 'b'))
# Output
col.1 col.2 col.3
1 a b
1 b c
1 b a
2 a b
2 b a
2 c b
3 a c
3 a b
我想删除col.1
中重复的行,同时优先保留具有col.2 == 'b'
和col.3 == 'c'
的行。 col.2
和col.3
中的匹配项是最优选的,而col.2
中的单个匹配项比col.3
中的单个匹配项和仅一列中的匹配项更受欢迎优先于完全不匹配。对于没有匹配项的重复行,可以保留任何重复行。
在给出的示例中,结果数据帧如下所示:
# Output.
col.1 col.2 col.3
1 b c
2 b a
3 a c
谢谢!
答案 0 :(得分:1)
我们将'col.1',filter
行分组,其中'col.2'是'b'或'col.3'是'c',然后filter
排在{{1 }}行基于'col.2'和'col.3'值
duplicated
答案 1 :(得分:0)
如果您group_by
和col.1
col.3
同时保留具有col.2 == 'b'
的重复项。然后,您仅获取group_by
和col.1
的输出,同时优先保留具有col.3 == 'c'
的重复项,最终得到所需的结果。如果更改了首选值,这也将遵循所需的逻辑。
df %>%
group_by(col.1, col.3) %>%
slice(match('b', col.2, nomatch = 1)) %>%
group_by(col.1) %>%
slice(match('c', col.3, nomatch = 1))
# Output:
# A tibble: 3 x 3
# Groups: col.1 [3]
col.1 col.2 col.3
<dbl> <fct> <fct>
1 1 b c
2 2 b a
3 3 a c