首页 > 解决方案 > 选择减法绝对值小于指定值的行

问题描述

假设我有这个数据框:

ID   X1           X2
1    1            2
2    2            1
3    3            1
4    4            1
5    5            5
6    6            20
7    7            20
8    9            20
9    10           20


dataset <- structure(list(ID = 1:9, X1 = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 
                                           10L), X2 = c(2L, 1L, 1L, 1L, 5L, 20L, 20L, 20L, 20L)),
                     class = "data.frame", row.names = c(NA, 
                                                         -9L))

我想选择行减法的绝对值大于或等于 2 的行(基于 X1 和 X2 列)。

例如,第 4 行的值为 4-1,即 3,应选中。

第 9 行的值为 10-20,即 -10。绝对值为 10,应选择。

在这种情况下,它将是第 3、4、6、7、8 和 9 行

我试过了:

dataset2 = dataset[,abs(dataset- c(dataset[,2])) > 2] 

但我得到一个错误。

操作:

abs(dataset- c(dataset[,2])) > 2

确实给了我总和大于 2 的行,但结果仅适用于我的第二列并且不能正确选择

标签: rrowsum

解决方案


我们可以得到'X1','X2'列之间的区别,创建一个逻辑表达式subset来子集行

subset(dataset, abs(X1 - X2) >= 2)
#  ID X1 X2
#3  3  3  1
#4  4  4  1
#6  6  6 20
#7  7  7 20
#8  8  9 20
#9  9 10 20

或使用索引

subset(dataset, abs(dataset[[2]] - dataset[[3]]) >= 2)

数据

dataset <- structure(list(ID = 1:9, X1 = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 
10L), X2 = c(2L, 1L, 1L, 1L, 5L, 20L, 20L, 20L, 20L)),
class = "data.frame", row.names = c(NA, 
-9L))

推荐阅读