Ver funciones all()
y any()
de las partes primera y segunda de sus preguntas, respectivamente. La función apply()
se puede usar para ejecutar funciones sobre filas o columnas. (MARGIN = 1
es filas, MARGIN = 2
son columnas, etc.). Tenga en cuenta que uso apply()
en df[, -1]
para ignorar la variable id
al hacer las comparaciones.
Parte 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
Parte 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
Para ver lo que está pasando, x > 10
devuelve un vector lógico para cada fila (a través de apply()
que indica si cada elemento es mayor que 10 all()
devuelve TRUE
if todos los elemento del vector de entrada son TRUE
y FALSE
de lo contrario any()
devuelve TRUE
if cualquier de los elementos en la entrada es TRUE
y FALSE
si todos son FALSE
.
entonces utiliza el vector lógica resultante de la apply()
llamada
> 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
al subconjunto df
(como se muestra más arriba).
+1 - y reemplace 'all' con' any' para la segunda pregunta. – flodel
espera, quiere hacer 'all (row [-1]> 10)' para no dar cuenta de la columna 'id'. O aplique la función en 'df [-1]'. – flodel