my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Uma solução alternativa que imita o comportamento dessa função e seria mais apropriada para inclusão dentro de um corpo da função:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Algumas pessoas criticam o uso which
como não necessário, mas isso impede que os NA
valores retornem resultados indesejados. O equivalente (.ie, não retornando linhas de NA para nenhum NA de V1 ou V2) às duas opções demonstradas acima sem a opção which
seria:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Nota: quero agradecer ao colaborador anônimo que tentou corrigir o erro no código imediatamente acima, uma correção que foi rejeitada pelos moderadores. Na verdade, houve um erro adicional que eu notei quando corrigi o primeiro. A cláusula condicional que verifica os valores de NA precisa ser a primeira a ser tratada como pretendia, pois ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
A ordem dos argumentos pode ser importante ao usar '& ".
[
precisará envolverwhich
ou usar!is.na
restrições adicionais .which
. Se V1 e V2 forem NA, você obterá uma fila de NA nessa posição se deixar de fora owhich
. Eu trabalho com grandes conjuntos de dados e até uma porcentagem relativamente pequena de NA realmente preenche minha tela com lixo eletrônico. Algumas pessoas pensam que isso é um recurso. Eu não.grepl
ougrep
também faz a correspondência de padrões para as linhas desejadas, além desses condicionais?Você está procurando "|." Consulte http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
fonte
NA
s em uma trama de dados:vc <- data.frame(duzey=factor(c("Y","O","Y","D","Y","Y","O"), levels=c("D","O","Y"), ordered=TRUE), cinsiyet=c("E","E","K",NA,"K","E","K"), yas=c(8,3,9,NA,7,NA,6), Not=c(NA,1,1,NA,NA,2,1)); vc; vc[vc$cinsiyet == "E" | vc$Not < 4,]; vc[vc$cinsiyet == "E" & vc$Not < 2,]
Por uma questão de integridade, podemos usar os operadores
[
e[[
:Várias opções
df $ name é equivalente a df [["name", exato = FALSE]]
Usando
dplyr
:Usando
sqldf
:Saída para as opções acima:
fonte
sqldf
pacote é muito bom. Muito útil especialmente quandosubset()
fica um pouco :) dolorosa