首页 > 解决方案 > 删除值高于某个阈值的重复观测值

问题描述

如果观察值大于某个阈值(在下面的示例中 >=5),我想删除 data.table 中较小的重复项。我尝试了以下方法:

library(data.table)

data = data.table(
a = c("a1", "a2", "a3", "a4", "a2", "a3", "a1"),
b = c("4", "2", "7", "3", "8", "2", "2"))

data <- data[order(a, b, decreasing = TRUE),]
data <- for (i in 1 : nrow(data)){
    if (data$b[i] >= 5){
        data[!duplicated(data[, c('a')]),]
        }}

使用此命令,我得到一个空的 data.table。但我希望有这样一张桌子:

data = data.table(
a = c("a4", "a3", "a2", "a1", "a1"),
b = c("3", "7", "8", "4", "2"))

非常感谢你的帮助:)

标签: rfor-loopduplicatesdata.table

解决方案


这应该工作

bval <- 5 
data[!a %in% data[b >= bval, a] | (a %in% data[b >= bval, a] & b >= bval), ]
    a b
1: a1 4
2: a3 7
3: a4 3
4: a2 8
5: a1 2

If 过滤器data使用以下逻辑:如果a 没有 b 值等于(或大于)5或 |
,则 保留行 a 的 b 值等于(或大于 5)且 & b 的值等于(或大于)5。
!a %in% data[b >= bval, a]

(a %in% data[b >= bval, a] & b >= bval)


推荐阅读