r - 根据其他变量中的条件值,通过一个变量对 data.table 进行子集化

标签 r data.table subset

我在 R 中有一个 data.table,我需要根据特定条件对其进行子集化

dt <- data.table(X_ID=c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4), Y_ID=c(1,2,3,4,5,6, 1,2,3,4,5,6, 1,2,3,4,5,6, 1,2,3,4,5,6), Value1=c(6,4,8,9,10,12,5,7,8,3,4,8,7,3,9,7,4,12,45,3,2,1,2,5),Value2=c(6,6,8,9,10,12,5,4,8,3,4,8,7,5,9,7,4,12,45,1,2,1,2,5))

我想保留当 Y_ID 等于 2 时值 1 大于值 2 的所有 X_ID。例如,对于 X_ID=1,当 Y_ID=2 时值 1 大于值 2。在这种情况下,我想保留 X_ID=1 的所有行。

我目前正在使用过滤器功能(如下所示)来获取解决方案。

dt2 <- filter(dt,is.na(match(dt$X_ID,filter(dt, Y_ID==2&Value1<Value2)$X_ID)))

但是有没有办法让这段代码更具可读性呢?或者使用 data.table 原生的东西来对我需要的行进行子集化?

最佳答案

使用data.table:

    dt<-dt[X_ID %in% dt[(Y_ID == 2 & (Value1 > Value2))]$X_ID]

#    X_ID Y_ID Value1 Value2
#1:    2    1      5      5
#2:    2    2      7      4
#3:    2    3      8      8
#4:    2    4      3      3
#5:    2    5      4      4
#6:    2    6      8      8
#7:    4    1     45     45
#8:    4    2      3      1
#9:    4    3      2      2
#10:    4    4      1      1
#11:    4    5      2      2
#12:    4    6      5      5

关于r - 根据其他变量中的条件值,通过一个变量对 data.table 进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663196/

相关文章:

R:如何从 "HH:MM:SS.CC"这样的字符串中获取秒数

r - 将聚合对象绑定(bind)到原始数​​据框

r - 使用 mutate() 返回关于无法修改的错误,因为它是一个分组变量

r - 添加一列,其中包含具有最大频率的对象的值

r - 如何使用列中的多个字符对数据进行子集化

r - 多年来连续一周的过渡

r - 自定义排序 `by=`

R data.table - 如何使用分配的变量作为列名来计算摘要_和_分组

r - 快速滚动平均值 + 汇总

machine-learning - kaggle 泰坦尼克号 妇女和 child 子集