【发布时间】:2020-03-12 16:18:40
【问题描述】:
我想根据其他三列的内容从我的数据框中删除重复的行。
name col1 col2 col3
1 BOB HIGH NO 1
2 BOB MID NO 1
3 BILL MID YES 2
4 BILL MID NO 3
5 KAREN LOW YES 7.5
6 KAREN LOW YES 10
7 STEVE LOW NO 1
8 STEVE LOW NO 1
9 PETE LOW NO -4
10 PETE LOW NO -5
从这里我想首先在 col1 上选择“HIGH”>“MID”>“LOW”。如果两者相同,请选择 col2 并选择“YES”>“NO”。如果两者相同,则选择 col3,其中 +∞ > -∞。如果三者相同,则保留两者。
所以在这个例子中是:
name col1 col2 col3
1 BOB HIGH NO 1
3 BILL MID YES 2
6 KAREN LOW YES 10
7 STEVE LOW NO 1
8 STEVE LOW NO 1
9 PETE LOW NO -4
R 和 python 解决方案都可以接受。
编辑:阐明 col3 的条件。
编辑2: 这为我解决了。感谢@Adam 的帮助!
df %>%
group_by(name) %>%
mutate(col1 = factor(col1, levels = c("LOW", "MID", "HIGH")),
col2 = factor(col2, levels = c("NO", "YES")),
interact = as.character(interaction(c(col1), c(col2))),
rank = dense_rank(desc(interact))) %>%
filter(rank == min(rank)) %>%
filter(col3 == max(col3)) %>%
select(-c(interact, rank))
【问题讨论】:
-
看起来像一个简单的 'arrange()' 然后 'x[!duplicated(x)]'
标签: r python-3.x