我想从我的数据集中识别并删除重复项。问题是我有两个不同的标准。首先,我使用的主要标准是最近的时间。但是,并非所有重复项都有日期。在缺少日期的情况下,我将不得不逐个检查以查看我要保留的行。因此,这是我需要的:
假设我有以下数据:
df <- data.frame(id = c("a", "a", "b","b", "c","c"),
date = c("2023-05-16", "2023-08-21", "2023-06-05", NA, "2023-05-07", "2023-05-20"))
library(lubridate)
df$date <- ymd(df$date)
class(df$date)
[1] "Date"
df
id date
1 a 2023-05-16
2 a 2023-08-21
3 b 2023-06-05
4 b <NA>
5 c 2023-05-07
6 c 2023-05-20
字符串
首先,我需要识别所有包含NA的重复项,以比较行,并查看我将保留哪一行。我需要一个类似于此的结果框架,它包含重复项和唯一值:
id date
1 b 2023-06-05
2 b <NA>
型
请注意,我有两行,所以我可以比较它们。我保持示例简单,但我不确定在我的实际 Dataframe 上,每个id有多少重复。接下来,我将剩下的 Dataframe :
id date
1 a 2023-05-16
2 a 2023-08-21
3 c 2023-05-07
4 c 2023-05-20
型
我只需要保留最新的值,我将以这样的方式结束:
id date
1 a 2023-08-21
2 c 2023-05-20
型
如果有什么不清楚的地方,你需要更多的澄清,请告诉我。
2条答案
按热度按时间gmxoilav1#
第1部分:识别所有包含NA的副本,并将其保存在单独的df中以供审查:
字符串
第2部分:保留重复值的最新条目
型
nzk0hqpo2#
我会使用一个标志而不是split。使用
ave
,你可以标记哪个id在日期中有anyNA
,创建一个keep
向量来子集有效或无效的id。使用which.max
获取最新的日期。字符串
更新
注意,从R4.3.0开始,我们可以在
by
中使用公式。型
型