выбор строк данных, где только одно значение отличается от ссылки - PullRequest
0 голосов
/ 07 февраля 2019

Я создал фрейм данных, в котором есть все комбинации набора переменных, но меня интересуют только строки, в которых только одно из этих значений отличается от эталонного набора значений.

Таким образом, если интересующие значения:

V1int <- 1
V2int <- 2
V3int <- 3

и мой фрейм данных:

df<-data.frame("V1"=c(1,1,2,1), "V2"=c(2,2,2,3), "V3"=c(3,1,3,2))

Тогда я бы хотел первые три строки (c (1,2,3), c (1,2,1) и c (2,2,3)), но не четвертый (c (1,3,2)), потому что в одном только неуместном значениипервые три строки, но две неуместные в последней строке.

Я предполагаю, что должен быть какой-то оператор "или", который мог бы генерировать все подходящие комбинации значений, которые я мог бы затем поместить в подкадр данных, но я не уверен.У меня есть десять столбцов и 40000 комбинаций значений, поэтому индивидуально указать комбинации желаемых значений не совсем возможно.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Другой угол

пример данных

df<-data.frame("V1"=c(1,1,2,1), "V2"=c(2,2,2,3), "V3"=c(3,1,3,2))

V1int <- 1
V2int <- 2
V3int <- 3

код

reference <- c( V1int, V2int, V3int )
df[ apply( df, 1, function(x) length( which( as.vector(x) == reference ) ) ) > 1, ]

#   V1 V2 V3
# 1  1  2  3
# 2  1  2  1
# 3  2  2  3
0 голосов
/ 07 февраля 2019

Вы можете попробовать

df[apply(df, 1, function(x) sum(1:3  == x) >= 2), ]
#  V1 V2 V3
#1  1  2  3
#2  1  2  1
#3  2  2  3

, где 1:3 - сокращение от c(V1int, V2int, V3int).

. Идея состоит в том, чтобы сравнить элементы каждой строки с 1:3, а затем проверить,как минимум два элемента одинаковы.Результатом является логический вектор, который мы используем для подмножества ваших данных.


Другой вариант будет

df[colSums(t(df) == 1:3) >= 2, ]
...