r - 根据一行过滤重复项,并根据另一行中的值排除重复项

标签 r filter dplyr duplicates

我有一个带有纵向数据的 df 。每个 id 都有多个秒测量值,但其中一些是重复的。我想删除秒列中每个 id 的重复项,但我想删除测量列中具有 NA 的重复项,因为测量值中具有值的行包含我需要保留的其他信息。所以基本上我需要识别重复项,然后删除另一列中带有 NA 的重复项。 编辑: 但问题是,也存在重复,其中测量行不是 NA,而是例如1 和 2。然后我需要删除 2,因为测量 1 包含相关的其他信息。有时也有重复的测量值均不适用。

我的 df 看起来有点像这样:

<表类=“s-表”> <标题> id 测量 秒 其他相关信息 <正文> 一个 1 5000 蓝色 一个 不适用 5000 不适用 一个 2 4000 不适用 B 1 3400 红色 B 2 5000 不适用 B 不适用 5000 不适用 C 不适用 3000 不适用 C 1 3000 蓝色 D 1 2000 绿色 D 2 2000 不适用 D 3 1000 不适用 D 不适用 4000 不适用 D 不适用 4000 不适用

我需要它像这样:

<表类=“s-表”> <标题> id 测量 秒 ... <正文> 一个 1 5000 蓝色 一个 2 4000 不适用 B 1 3400 红色 B 2 5000 不适用 C 1 3000 蓝色 D 1 2000 绿色 D 3 1000 不适用 D 不适用 4000 不适用

我知道可能有一个非常简单的 dplyr 解决方案,到目前为止我已经尝试过:

df <- df %>% group_by(id, seconds) %>% filter(n() > 1)

还有这个:

df <- df %>%
   group_by(id) %>%
   filter(measurement==NA & duplicates(seconds)

所以基本上我需要的 if else 命令是:

if "seconds" = duplicate & one measurement row == na -> delete the  na row
if "seconds" = duplicate & measurement == not na -> keep seconds = 1 row
if "seconds" = duplicate & both measurement == na -> delete randomly one

最佳答案

measurement==NA 始终返回 NA。请改用 is.na(measurement)。另外,您正在寻找命令重复

所以:

df <- df %>%
   group_by(id) %>%
   filter(is.na(measurement) & duplicated(seconds)

df <- df %>%
   group_by(id) %>%
   filter(is.na(measurement), duplicated(seconds)

关于r - 根据一行过滤重复项,并根据另一行中的值排除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67634243/

相关文章:

r - 查找向量中 n 个最常见的值

r - Shiny 表格中的下拉功能

php - 过滤 PDO SQL 查询

r - dplyr mutate_at 函数应用于多个列 - 使用动态列名称

r - 如何根据 R 中的类型选择列?

r - 如何使R词云以较浅的颜色显示最常用的术语

html - 在对象周围创建实心边框的 CSS 过滤器

mysql - 如何在 MySQL Workbench 中撤消 "filter to this schema"?

r - 时间段 R 的条件总和

r - 使用 dplyr mutate 查找组中第一次出现的值