r - 根据列中的字符值删除数据框中的重复行之一
问题描述
在给定特定条件的情况下,我有一个包含一些重复项的数据框。
我有一列(column_A),其中包含分析结果。我的数据框中的一些 ID 有两个结果,这就是 ID 重复发生的原因。如果“id_no”中的ID在column_A中同时具有“analysisA”和“analysisB”,我想保留column_A ==“analysisB”的行,否则不要删除一行。
(请注意,我正在运行的原始数据框有多个其他字符和数字列)
虚拟数据:
structure(list(id_no = structure(c(1L, 2L, 2L, 3L, 4L, 4L), .Label = c("A",
"B", "C", "D"), class = "factor"), column_A = structure(c(1L,
1L, 2L, 2L, 1L, 2L), .Label = c("analysisA", "analysisB"), class = "factor")), .Names = c("id_no",
"column_A"), row.names = c(NA, -6L), class = "data.frame")
看起来像这样:
id_no column_A
A analysisA
B analysisA
B analysisB
C analysisB
D analysisA
D analysisB
预期输出:
id_no column_A
A analysisA
B analysisB
C analysisB
D analysisB
有没有办法用 dplyr 做到这一点?我没有让它与 filter() 的条件过滤一起正常工作。
解决方案
一种data.table方式:
在您的测试用例中,您基本上需要每个 ID 组的最后一项,因此以下 data.table 单行使用tail
将起作用。
library(data.table)
dt[, tail(.SD,1), by=id_no]
将产生:
> dt[, tail(.SD,1), by=id_no]
id_no column_A
1: A analysisA
2: B analysisB
3: C analysisB
4: D analysisB
资源:
推荐阅读
- regex - 谷歌表格正则表达式找到最左边的交替匹配
- c# - 更新 2 Pcs 中的 datagridview
- jquery - jQuery忽略调用html()时创建的初始html元素
- c# - 如何在 WebApi 中授权 SignalR Hub?
- sql - T-SQL 选择满足聚合条件的所有范围组合
- .htaccess - Apache modrewrite htaccess 重定向
- reactjs - 状态更新后如何停止重新安装地图组件(react-google-maps)
- javascript - 如何使用 ionic 和 firebase 获取注册用户的 uid
- html - 如何使用 xslt 1.0 为三个单独的项目解析一个 html 块?
- php - 为什么我的 CSS 在根目录之外时无法链接?