R 基于多个条件(包括最长日期)删除重复项
如果我看到如下所示的数据帧:R 基于多个条件(包括最长日期)删除重复项,r,duplicates,max,R,Duplicates,Max,如果我看到如下所示的数据帧: ID Code Desc. Expiry Date 1 2C Long 2018-02-01 1 2C Long 2020-02-01 2 NA Tall 2019-04-30 2 NA Tall 2016-04-28 我想在ID和代码相同时删除重复项。我想根据最长有效期删除副本。我想要的输出是: ID Code Desc. Expiry Date 1 2C Long 2020-02
ID Code Desc. Expiry Date
1 2C Long 2018-02-01
1 2C Long 2020-02-01
2 NA Tall 2019-04-30
2 NA Tall 2016-04-28
我想在ID和代码相同时删除重复项。我想根据最长有效期删除副本。我想要的输出是:
ID Code Desc. Expiry Date
1 2C Long 2020-02-01
2 NA Tall 2019-04-30
我试过了
data <- data[!duplicated(data[c("ID", "CODE", MAX("Expiry Date"))]),]
如何解决此问题?我们可以通过“ID”、“代码”和“切片”对带有
max
“到期日期”的行进行分组。在R
中,max
获取max
imum值,which.max
最大值的索引
library(dplyr)
data %>%
group_by(ID, Code) %>%
slice(which.max(`Expiry Date`))
# A tibble: 2 x 4
# Groups: ID, Code [2]
# ID Code Desc. `Expiry Date`
# <int> <chr> <chr> <date>
#1 1 2C Long 2020-02-01
#2 2 <NA> Tall 2019-04-30
注意:base R
中没有名为MAX
的函数。它是max
。此外,我们假设到期日
为日期
类。如果不是,则应首先将其转换为带有as.Date
在
base R
中,我们可以基于“到期日”执行订单
,然后使用复制的
data1 <- data[do.call(order, data[c('ID', 'Code', 'Expiry Date')]),]
data1[!duplicated(data1[c('ID', 'Code')], fromLast = TRUE),]
# ID Code Desc. Expiry Date
#2 1 2C Long 2020-02-01
#3 2 <NA> Tall 2019-04-30
data1我们可以通过“ID”、“code”和slice
对带有max
过期日期的行进行分组。在R
中,max
获取max
imum值,which.max
最大值的索引
library(dplyr)
data %>%
group_by(ID, Code) %>%
slice(which.max(`Expiry Date`))
# A tibble: 2 x 4
# Groups: ID, Code [2]
# ID Code Desc. `Expiry Date`
# <int> <chr> <chr> <date>
#1 1 2C Long 2020-02-01
#2 2 <NA> Tall 2019-04-30
注意:base R
中没有名为MAX
的函数。它是max
。此外,我们假设到期日
为日期
类。如果不是,则应首先将其转换为带有as.Date
在base R
中,我们可以基于“到期日”执行订单
,然后使用复制的
data1 <- data[do.call(order, data[c('ID', 'Code', 'Expiry Date')]),]
data1[!duplicated(data1[c('ID', 'Code')], fromLast = TRUE),]
# ID Code Desc. Expiry Date
#2 1 2C Long 2020-02-01
#3 2 <NA> Tall 2019-04-30
data1
data <- structure(list(ID = c(1L, 1L, 2L, 2L), Code = c("2C", "2C", NA,
NA), Desc. = c("Long", "Long", "Tall", "Tall"),
`Expiry Date` = structure(c(17563,
18293, 18016, 16919), class = "Date")), row.names = c(NA, -4L
), class = "data.frame")