#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?