R 根据三个不同列的内容删除重复行

R 根据三个不同列的内容删除重复行,r,python-3.x,R,Python 3.x,我想根据其他三列的内容从数据框中删除重复的行 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 PE

我想根据其他三列的内容从数据框中删除重复的行

   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,其中“高”>“中”>“低”。如果两者相同,则选择col2并选择其中的“是”>“否”。如果两者相同,则选择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))
数据:

df%
分组单位(名称)%>%
突变(col1=因子(col1,水平=c(“低”、“中”、“高”)),
col2=系数(col2,等级=c(“否”、“是”),
col3_焊盘=str_焊盘(col3,宽度=最大值(str_长度(col3)),焊盘=0),
交互=角色(交互(c(col1),c(col2),col3_pad)),
秩=密集秩(描述(交互)))%>%
过滤器(秩==最小(秩))
结果:

我留下了虚拟列来显示发生了什么。但是你现在可以放下它们了

#一个tible:5 x 6
#分组:名称[4]
名称col1 col2 col3交互等级
1波波高1号3.1.1
2账单中期是2.2.2 1
3 KAREN LOW是2 1.2.2 1
4 STEVE LOW NO 1.1.1 1
5 STEVE LOW NO 1.1.1 1

看起来像一个简单的'arrange()'然后'x[!duplicated(x)]注意到,当col3>9时,比interact更有效,但选择第一个整数最高的一个。如果我把KAREN改为9和10,这个代码会选择9而不是10。啊,根据文本排序,这是有意义的。这可以通过填充到最大宽度来修复。例如,如果最大的col3是4位数字,则添加前导零以使所有数字都如此宽。我正在更新。这+一些关于col3的binning解决了它,谢谢你,伙计!作为一个学习/兴趣问题,我注意到这段代码不能很好地处理十进制数或负数。例-5在-4以上被选中,7.5在10以上被选中。我把它留了下来,以防有人有同样的问题,因为原来的问题还没有得到回答。“在哪里?”+∞ > -∞ " 部分仍然存在。