r - 在 R 中,如何删除基于两列的重复项,其值可能是可交换的?
问题描述
我的样本数据是:
a <- data.frame(a1=c('a','b','c','d','e'),
a2=c('b','a','d','c','f'),
a3=c(0.1,0.3,0.5,0.1,1))
我想要做的是合并列 a1 和 a2,并同时对字符串进行排序。因此,数据应更改为:
a1 a2 a3 a12
1 a b 0.1 a,b
2 b a 0.3 a,b
3 c d 0.5 c,d
4 d c 0.1 c,d
5 e f 1.0 e,f
排序后,我们可以看到第 1 行和第 2 行实际上在一个组中,第 3 和第 4 行也是如此。然后对于每一组,我只想保留 a3 最大的行。所以,最后,数据应该是这样的:
a1 a2 a3 a12
2 b a 0.3 a,b
3 c d 0.5 c,d
5 e f 1.0 e,f
我坚持如何对a1和a2进行排序。有什么快速的方法可以做到这一点吗?
解决方案
您可以使用sort
and paste
inapply
来获取a12
. 然后用于which.max
获取a3
最大值所在的行并返回它。
a$a12 <- apply(a[1:2], 1, function(x) paste(sort(x), collapse=","))
do.call(rbind, lapply(split(a, a$a12), function(x) x[which.max(x$a3),]))
# a1 a2 a3 a12
#a,b b a 0.3 a,b
#c,d c d 0.5 c,d
#e,f e f 1.0 e,f
推荐阅读
- python - 将列表转换为DataFrame如何删除第一行中的前导0
- amazon-web-services - Intellij 2021 无法解析来自自定义 maven 存储库的符号?
- python-3.x - 如何获得 scipy.integrate.quad() 使用的 x 值?
- python - 如果矩阵包含值,如何修改列表?
- c++ - 为什么颜色在 C++ 的 Ncurses 库中不起作用?
- cryptography - 在另一个库 AES-256 GCM 中使用 tink 密钥
- wordpress - pre_get_posts 和 meta_query
- android - 将 Jetpack Compose 导航添加到现有项目时出现问题
- python - python 新手,需要知道 __init__ 的行为方式
- glassfish - Glassfish 管理员控制台 - 登录问题