Remover linhas do banco de dados, sujeito a algum critério da variável

Olá a todos, Preciso excluir as linhas do banco de dados segundo algum critério da variável, por exemplo: x1=c(seq(1,10),NA,seq(1,10)) x2=c(seq(1,9),NA,seq(1,11)) x3=c(seq(1,8),NA,seq(1,12)) x4=c(seq(1,7),NA,seq(1,13)) x5=c(seq(1,6),NA,seq(1,14)) dados=data.frame(x1,x2,x3,x4,x5)
dados
x1 x2 x3 x4 x5 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 NA 8 8 8 8 NA 1 9 9 9 NA 1 2 10 10 NA 1 2 3 11 NA 1 2 3 4 12 1 2 3 4 5 13 2 3 4 5 6 14 3 4 5 6 7 15 4 5 6 7 8 16 5 6 7 8 9 17 6 7 8 9 10 18 7 8 9 10 11 19 8 9 10 11 12 20 9 10 11 12 13 21 10 11 12 13 14 se eu utilizar
na.exclude(dados)
x1 x2 x3 x4 x5 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 12 1 2 3 4 5 13 2 3 4 5 6 14 3 4 5 6 7 15 4 5 6 7 8 16 5 6 7 8 9 17 6 7 8 9 10 18 7 8 9 10 11 19 8 9 10 11 12 20 9 10 11 12 13 21 10 11 12 13 14 as linhas 7 a 11 foram excluídas, porém como eu trabalho com banco de dados de 50 variáveis, gostaria de excluir , por exemplo, as linhas cuja variáveis x4 e x5 sejam igual a NA (não somente NA, mas outro critério numérico ou caracteres), produzindo o seguinte resultado: x1 x2 x3 x4 x5 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 9 9 9 NA 1 2 10 10 NA 1 2 3 11 NA 1 2 3 4 12 1 2 3 4 5 13 2 3 4 5 6 14 3 4 5 6 7 15 4 5 6 7 8 16 5 6 7 8 9 17 6 7 8 9 10 18 7 8 9 10 11 19 8 9 10 11 12 20 9 10 11 12 13 21 10 11 12 13 14 Obrigado.

Uma solução: # Mostrando o que significa cada coisa is.na(dados$x4) is.na(dados$x5) (is.na(dados$x4) | is.na(dados$x5)) !(is.na(dados$x4) | is.na(dados$x5)) # Na verdade só precisa disso aqui: dados[!(is.na(dados$x4) | is.na(dados$x5)),] Em resumo, tu precisa de um vetor de TRUE/FALSE para pegar só algumas linhas (ou o número das linhas, mas T/F é mais direto)

Rodrigo, Excelente! obrigado pela dica... deu certo... valeu Em 22 de novembro de 2012 14:09, Rodrigo Coster <rcoster@gmail.com>escreveu:
Uma solução:
# Mostrando o que significa cada coisa is.na(dados$x4) is.na(dados$x5) (is.na(dados$x4) | is.na(dados$x5)) !(is.na(dados$x4) | is.na(dados$x5))
# Na verdade só precisa disso aqui: dados[!(is.na(dados$x4) | is.na(dados$x5)),]
Em resumo, tu precisa de um vetor de TRUE/FALSE para pegar só algumas linhas (ou o número das linhas, mas T/F é mais direto)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Rodrigo, Mais uma ajuda, e se fosse outro critério, por exemplo, excluir as linhas com x4=1 e x5=6? Em 22 de novembro de 2012 14:16, Abel Brasil Ramos da Silva < abelbrasil88@gmail.com> escreveu:
Rodrigo,
Excelente! obrigado pela dica... deu certo...
valeu
Em 22 de novembro de 2012 14:09, Rodrigo Coster <rcoster@gmail.com>escreveu:
Uma solução:
# Mostrando o que significa cada coisa is.na(dados$x4) is.na(dados$x5) (is.na(dados$x4) | is.na(dados$x5)) !(is.na(dados$x4) | is.na(dados$x5))
# Na verdade só precisa disso aqui: dados[!(is.na(dados$x4) | is.na(dados$x5)),]
Em resumo, tu precisa de um vetor de TRUE/FALSE para pegar só algumas linhas (ou o número das linhas, mas T/F é mais direto)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Ao invés de is.na(dados$x4) tu colocaria dados$x4 == 1... dados[!(dados$x4 == 1 | dados$x5 == 6),] se for uma gama de valores, tu pode usar %in%, por ex, x4 = 1 ou 3, dados$x4 %in% c(1,6) dados[!(dados$x4 %in% c(1,6) | dados$x5 == 6),] No caso vai dar erro pq a variável que tu ta usando pra escolher tem NA, dai ele se perde um pouco, mas a ideia é essa 2012/11/22 Abel Brasil Ramos da Silva <abelbrasil88@gmail.com>
Rodrigo,
Mais uma ajuda, e se fosse outro critério, por exemplo, excluir as linhas com x4=1 e x5=6?
Em 22 de novembro de 2012 14:16, Abel Brasil Ramos da Silva < abelbrasil88@gmail.com> escreveu:
Rodrigo,
Excelente! obrigado pela dica... deu certo...
valeu
Em 22 de novembro de 2012 14:09, Rodrigo Coster <rcoster@gmail.com>escreveu:
Uma solução:
# Mostrando o que significa cada coisa is.na(dados$x4) is.na(dados$x5) (is.na(dados$x4) | is.na(dados$x5)) !(is.na(dados$x4) | is.na(dados$x5))
# Na verdade só precisa disso aqui: dados[!(is.na(dados$x4) | is.na(dados$x5)),]
Em resumo, tu precisa de um vetor de TRUE/FALSE para pegar só algumas linhas (ou o número das linhas, mas T/F é mais direto)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Rodrigo, Eu tinha executado dados[!(dados$x4 == 1),], pensei que estivesse errado por causa da linha com NA NA NA... entendi! Valeu pelas dicas... Mas, sabes como eu posso agir nessa situações onde tenho linhas NA NA NA...? Abraços Em 22 de novembro de 2012 14:30, Rodrigo Coster <rcoster@gmail.com>escreveu:
Ao invés de is.na(dados$x4) tu colocaria dados$x4 == 1...
dados[!(dados$x4 == 1 | dados$x5 == 6),]
se for uma gama de valores, tu pode usar %in%, por ex, x4 = 1 ou 3, dados$x4 %in% c(1,6)
dados[!(dados$x4 %in% c(1,6) | dados$x5 == 6),]
No caso vai dar erro pq a variável que tu ta usando pra escolher tem NA, dai ele se perde um pouco, mas a ideia é essa
2012/11/22 Abel Brasil Ramos da Silva <abelbrasil88@gmail.com>
Rodrigo,
Mais uma ajuda, e se fosse outro critério, por exemplo, excluir as linhas com x4=1 e x5=6?
Em 22 de novembro de 2012 14:16, Abel Brasil Ramos da Silva < abelbrasil88@gmail.com> escreveu:
Rodrigo,
Excelente! obrigado pela dica... deu certo...
valeu
Em 22 de novembro de 2012 14:09, Rodrigo Coster <rcoster@gmail.com>escreveu:
Uma solução:
# Mostrando o que significa cada coisa is.na(dados$x4) is.na(dados$x5) (is.na(dados$x4) | is.na(dados$x5)) !(is.na(dados$x4) | is.na(dados$x5))
# Na verdade só precisa disso aqui: dados[!(is.na(dados$x4) | is.na(dados$x5)),]
Em resumo, tu precisa de um vetor de TRUE/FALSE para pegar só algumas linhas (ou o número das linhas, mas T/F é mais direto)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Dai tu tem que antes decidir se tu quer ficar com os NA ou não, se tu fizer direito não vai acontecer de linhas só com NA... No caso, x4 != 1 e: # Descartando onde x4 é NA dados$x4 != 1 & !is.na(dados$x4) dados[dados$x4 != 1 & !is.na(dados$x4),] # Mantendo onde x4 é NA dados$x4 != 1 | is.na(dados$x4) dados[dados$x4 != 1 | is.na(dados$x4),] # A linha só com NA acontece quando, no meio do teu vetor de T/F tem um NA dados$x4 != 1 dados[dados$x4 != 1,]

Rodrigo, Obrigado pela ajuda... entendi! Valeu... Em 22 de novembro de 2012 15:16, Rodrigo Coster <rcoster@gmail.com>escreveu:
Dai tu tem que antes decidir se tu quer ficar com os NA ou não, se tu fizer direito não vai acontecer de linhas só com NA... No caso, x4 != 1 e:
# Descartando onde x4 é NA dados$x4 != 1 & !is.na(dados$x4) dados[dados$x4 != 1 & !is.na(dados$x4),]
# Mantendo onde x4 é NA dados$x4 != 1 | is.na(dados$x4) dados[dados$x4 != 1 | is.na(dados$x4),]
# A linha só com NA acontece quando, no meio do teu vetor de T/F tem um NA dados$x4 != 1 dados[dados$x4 != 1,]
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

se vc descreve o criterio magico q te leva p o ultimo data.frame seria grandioso... mas vc pode comecar com subset(dados, !is.na(x4) | !is.na(x5)) b 2012/11/22 Abel Brasil Ramos da Silva <abelbrasil88@gmail.com>
x1=c(seq(1,10),NA,seq(1,10)) x2=c(seq(1,9),NA,seq(1,11)) x3=c(seq(1,8),NA,seq(1,12)) x4=c(seq(1,7),NA,seq(1,13)) x5=c(seq(1,6),NA,seq(1,14))
dados=data.frame(x1,x2,x3,x4,x5)
participantes (3)
-
Abel Brasil Ramos da Silva
-
Benilton Carvalho
-
Rodrigo Coster