r - 删除(准)相同的行
问题描述
在下面的 data.df 中,我们看到第 2 行和第 3 行是相同的,只是第 4 行的平均值不同。
iso3 dest code year uv mean
1 ALB AUT 490700 2002 14027.2433 427387.640
2 ALB BGR 490700 2002 1215.5613 11886.494
3 ALB BGR 490700 2002 1215.5613 11886.494
4 ALB BGR 490700 2002 1215.5613 58069.405
5 ALB BGR 843050 2002 677.9827 4272.176
6 ALB BGR 851030 2002 31004.0946 32364.379
7 ALB HRV 392329 2002 1410.0072 6970.930
有什么简单的方法可以自动找到这些相同的行吗?我发现这个主题似乎可以回答这个问题,但我不明白“重复()”是如何工作的......
我想要的是一个“简单”的命令,我可以在其中精确地逐行确定哪个列值应该是相同的。类似的东西:function(data.df, c(iso3, dest, code, year, uv, mean))
找到完全相同的行并function(data.df, c(iso3, dest, code, year, uv))
找到“准”相同的行......
在第一种情况下,预期的结果类似于:
2 ALB BGR 490700 2002 1215.5613 11886.494
3 ALB BGR 490700 2002 1215.5613 11886.494
在第二个中:
2 ALB BGR 490700 2002 1215.5613 11886.494
3 ALB BGR 490700 2002 1215.5613 11886.494
4 ALB BGR 490700 2002 1215.5613 58069.405
任何想法?
解决方案
我们可以编写一个函数,然后传递我们想要考虑的列。
get_duplicated_rows <- function(df, cols) {
df[duplicated(df[cols]) | duplicated(df[cols], fromLast = TRUE), ]
}
get_duplicated_rows(df, c("iso3", "dest", "code", "year", "uv","mean"))
# iso3 dest code year uv mean
#2 ALB BGR 490700 2002 1215.6 11886
#3 ALB BGR 490700 2002 1215.6 11886
get_duplicated_rows(df, c("iso3", "dest", "code", "year", "uv"))
# iso3 dest code year uv mean
#2 ALB BGR 490700 2002 1215.6 11886
#3 ALB BGR 490700 2002 1215.6 11886
#4 ALB BGR 490700 2002 1215.6 58069
推荐阅读
- html - formtarget =“_blank”不适用于chrome中的按钮
- java - 即使我使用LinkedHashMap,为什么在将键转换为大写时也不按键的顺序
- python - 如何将第一个scrapy spider的抓取输出用于下一个scrapy spider
- python - 是否可以将预训练的 CNN 模型部署到两个不同的设备中?
- javascript - 使用深色或浅色模式
- python-3.x - 如何从外部访问函数内部声明的列表而不在python中调用函数?
- windows - 如何添加 Pre-Commit SVN Hook 来限制 Windows Server 大小超过 10 MB 的文件?
- javascript - 如何获取动态添加输入的值
- azure - 使用逻辑应用读取 azure blob 存储文件夹中的文件列表,并将带有扩展名的文件名插入 Azure SQL
- python - Tkinter 回调和 googletrans api 中的异常