См. Функции all()
и any()
для первой и второй частей ваших вопросов соответственно. Функция apply()
может использоваться для запуска функций над строками или столбцами. (MARGIN = 1
- строки, MARGIN = 2
- столбцы и т. Д.). Примечание. Я использую apply()
для df[, -1]
, чтобы игнорировать переменную id
при сравнении.
Часть 1:
> df <- data.frame(id=c(1:5), v1=c(0,15,9,12,7), v2=c(9,32,6,17,11))
> df[apply(df[, -1], MARGIN = 1, function(x) all(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
Часть 2:
> df[apply(df[, -1], MARGIN = 1, function(x) any(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
5 5 7 11
Чтобы увидеть, что происходит, x > 10
возвращает логический вектор для каждой строки (через apply()
, указывающий, больше ли каждый элемент 10. all()
возвращает TRUE
, если all element вектора ввода TRUE
и FALSE
в противном случае. any()
возвращает TRUE
, если любой элементов на входе равен TRUE
и FALSE
, если все FALSE
.
Затем я использую логический вектор, полученный в результате apply()
вызова
> apply(df[, -1], MARGIN = 1, function(x) all(x > 10))
[1] FALSE TRUE FALSE TRUE FALSE
> apply(df[, -1], MARGIN = 1, function(x) any(x > 10))
[1] FALSE TRUE FALSE TRUE TRUE
в подмножество df
(как показано выше).