Выбор строк, в которых абсолютное значение вычитания меньше заданного значения

#r #rowsum

#r #сумма строк

Вопрос:

Допустим, у меня есть этот фрейм данных:

 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, но результат работает только для моего второго столбца и не выбирается должным образом

Комментарии:

1. Не могли бы вы уточнить, какую математическую операцию должен выполнять код и какое абсолютное значение вы имеете в виду?

Ответ №1:

Мы можем получить разницу между столбцами ‘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))
  

Комментарии:

1. Я пробовал это без успеха! Можете ли вы попробовать записать на основе индекса столбцов?

2. Я получаю: Предупреждающее сообщение: длина логического индекса должна быть 1 или 9, а не 8. И строки выбраны неправильно!

3. @GabrielG. я обновил сообщение примером и выводом

4. Что-то не так. Это выбор неправильных строк! Я не уверен, почему, но в примере он должен выбрать строки 3, 4, 6, 7, 8 и 9

5. @GabrielG. Вы учитываете разницу между X1 и X2?