esto se reduce a dos etapas distintas:
- Figura cabo cuando su condición es verdadera, y por lo tanto calcular un vector de booleanos, o, como yo prefiero, sus índices envolviéndolo en
which()
- Cree un
data.frame
actualizado excluyendo los índices del paso anterior.
Aquí se muestra un ejemplo:
R> set.seed(42)
R> DF <- data.frame(sub=rep(1:4, each=4), day=sample(1:4, 16, replace=TRUE))
R> DF
sub day
1 1 4
2 1 4
3 1 2
4 1 4
5 2 3
6 2 3
7 2 3
8 2 1
9 3 3
10 3 3
11 3 2
12 3 3
13 4 4
14 4 2
15 4 2
16 4 4
R> ind <- which(with(DF, sub==2 & day==3))
R> ind
[1] 5 6 7
R> DF <- DF[ -ind, ]
R> table(DF)
day
sub 1 2 3 4
1 0 1 0 3
2 1 0 0 0
3 0 1 3 0
4 0 2 0 2
R>
y vemos que sub==2
tiene sólo una entrada restante con day==1
.
Editar La condición compuesto se puede hacer con un 'o' como sigue:
ind <- which(with(DF, (sub==1 & day==2) | (sub=3 & day=4)))
y aquí es un nuevo ejemplo completo
R> set.seed(1)
R> DF <- data.frame(sub=rep(1:4, each=5), day=sample(1:4, 20, replace=TRUE))
R> table(DF)
day
sub 1 2 3 4
1 1 2 1 1
2 1 0 2 2
3 2 1 1 1
4 0 2 1 2
R> ind <- which(with(DF, (sub==1 & day==2) | (sub==3 & day==4)))
R> ind
[1] 1 2 15
R> DF <- DF[-ind, ]
R> table(DF)
day
sub 1 2 3 4
1 1 0 1 1
2 1 0 2 2
3 2 1 1 0
4 0 2 1 2
R>
Ese es el boleto. Gracias. ¿Qué significa% en%? –
Es un ejemplo de un operador infijo y devuelve un vector lógico que le indica cuáles de los elementos en el primer argumento están contenidos en el segundo argumento. Ver? Partido donde está definido. –
@BondedDust y aquí también –