В качестве примера я использую DF
, а не data
.
DF[apply(apply(as.matrix(DF[c("Col1","Col2","Col3")]),
c(1,2), `%in%`, criteria),
1, any),]
Для пробоя, что это делает:
Сделайте матрицу из указанных столбцов, и для каждого элемента в этом тесте матрицы, если она содержит один из критериев. Затем для каждой строки этой матрицы смотрите, есть ли какой-либо из элементов строки: TRUE
. Если да, сохраните соответствующую строку исходного набора данных.
Работа на примере:
Начать с фиктивными данными:
DF <- data.frame(Col1=seq(1, by=2, length=10),
Col2=seq(3, by=3, length=10),
Col3=seq(7, by=1, length=10),
other=LETTERS[1:10])
который выглядит как
> DF
Col1 Col2 Col3 other
1 1 3 7 A
2 3 6 8 B
3 5 9 9 C
4 7 12 10 D
5 9 15 11 E
6 11 18 12 F
7 13 21 13 G
8 15 24 14 H
9 17 27 15 I
10 19 30 16 J
Вытащите только столбцы, представляющие интерес.
> as.matrix(DF[c("Col1","Col2","Col3")])
Col1 Col2 Col3
[1,] 1 3 7
[2,] 3 6 8
[3,] 5 9 9
[4,] 7 12 10
[5,] 9 15 11
[6,] 11 18 12
[7,] 13 21 13
[8,] 15 24 14
[9,] 17 27 15
[10,] 19 30 16
Проверить каждый элемент по сравнению с критериями
> apply(as.matrix(DF[c("Col1","Col2","Col3")]), c(1,2), `%in%`, criteria)
Col1 Col2 Col3
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
[4,] TRUE FALSE TRUE
[5,] TRUE FALSE FALSE
[6,] FALSE FALSE FALSE
[7,] FALSE FALSE FALSE
[8,] FALSE FALSE FALSE
[9,] FALSE FALSE FALSE
[10,] FALSE FALSE FALSE
испытаний, если какой-либо из значений в строке истинны
> apply(apply(as.matrix(DF[c("Col1","Col2","Col3")]), c(1,2), `%in%`, criteria), 1, any)
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
использовать, чтобы индекс исходного кадра данных.
> DF[apply(apply(as.matrix(DF[c("Col1","Col2","Col3")]), c(1,2), `%in%`, criteria), 1, any),]
Col1 Col2 Col3 other
1 1 3 7 A
2 3 6 8 B
3 5 9 9 C
4 7 12 10 D
5 9 15 11 E
Обратите внимание, что справочная страница для 'subset' предостерегает от ее использования программно, так как использует нестандартную оценку – richiemorrisroe
Я читал эту осторожность на странице справки, но я не знаю, что это значит. Почему «нестандартная оценка» может быть проблемой? В моем случае я просто разбираю данные, чтобы создать некоторую описательную статистику, поэтому я не думаю, что «подмножество» будет причиной для меня ... но в каких случаях это может вызвать проблемы? Благодарю. – user1257313