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以上被选中。我把它留了下来,以防有人有同样的问题,因为原来的问题还没有得到回答。“在哪里?”+∞ > -∞ " 部分仍然存在。