[R-br] Filtro em massa (subset)

Benilton Carvalho beniltoncarvalho em gmail.com
Segunda Julho 25 20:10:56 BRT 2011


se quiser encurtar um pouco mais:

subset(dados, z %in% filtro)



2011/7/26 Rodrigo Coster <rcoster em gmail.com>:
> Vinicius, tenta assim:
> subset(dados,dados$z %in% filtro,drop=F)
>
>
>
> 2011/7/25 Vinicius Brito Rocha <viniciusbritor em gmail.com>
>>
>> Esse é o problema,
>>
>> não quero ter que escrever todas as retrições. Uma vez que as mesmas estão
>> armazenadas em uma variável gostaria de saber se é possível algo do tipo:
>>
>> x=rnorm(100)
>> y=rpois(100,lamb=2)
>> z=as.factor(sample(c("A","B","C","D"),size=100,replace=T))
>>
>> dados=data.frame(x,y,z)
>>
>>
>> # filtros
>> filtro=as.factor(c("A","B","C"))
>>
>> # algo parecido com isso
>> subset(dados,dados$z==filtro,drop=F)
>> # não quero ter que escrever todas as restriçoes:
>> subset(dados,dados$z=="A"|
>> dados$z=="B"|dados$z=="C"
>> ,drop=F)
>>
>>
>> Tem como?
>>
>> Abs
>>
>>
>> Em 25 de julho de 2011 19:01, Jose Claudio Faria
>> <joseclaudio.faria em gmail.com> escreveu:
>>>
>>> Em relação ao email anterior, usando a distância interquartílica,
>>> ficaria algo assim:
>>>
>>> dadf <- na.omit(dad)
>>>
>>> dadf <- subset(dadf,
>>>               Idade < median(dadf[,1]) +
>>>               2.5*(quantile(dadf[,1])[4] -
>>>                    quantile(dadf[,1])[2]) &
>>>               Idade > median(dadf[,1]) -
>>>               2.5*(quantile(dadf[,1])[4] -
>>>                    quantile(dadf[,1])[2]) &
>>>               Tempo < median(dadf[,2]) +
>>>               2.5*(quantile(dadf[,2])[4] -
>>>                    quantile(dadf[,2])[2]) &
>>>               Tempo > median(dadf[,2]) -
>>>               2.5*(quantile(dadf[,2])[4] -
>>>                    quantile(dadf[,2])[2]))
>>>
>>> E você pode ir adicionando outros critérios nesse mesmo subset ou em
>>> subsequentes, para não ficar muito complexo.
>>>
>>> Dá um trabalhinho, sem dúvida, mas você sabe exatamente o que está
>>> fazendo.
>>> Adicionalmente, evita gastar muito tempo em busca de possíveis pacotes
>>> e estudo da documentação.
>>>
>>> Abs,
>>> --
>>> ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
>>> Jose Claudio Faria
>>> Estatistica - Prof. Pleno
>>> UESC/DCET/Brasil
>>> joseclaudio.faria at gmail.com
>>> ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
>>>
>>>
>>> Em 25 de julho de 2011 18:38, Jose Claudio Faria
>>> <joseclaudio.faria em gmail.com> escreveu:
>>> > Vinicius,
>>> >
>>> > A função subset é bem flexível e permite elevado nível de customização.
>>> > Geralmente uso ela para crítica dos dados, antecedendo análises.
>>> > Não seria interessante para você?
>>> >
>>> > Por exemplo:
>>> >
>>> > # gerando um data.frame com outliers
>>> > Idade <- c(NA, -10, rnorm(1e2, m=30, sd=2), 150)
>>> > Tempo <- c(rnorm(1e2, m=10, sd=1), NA, -50, 1e3)
>>> > dad <- data.frame(Idade, Tempo)
>>> >
>>> > str(dad)
>>> >
>>> > # verificar outliers
>>> > boxplot(dad, range=2.5)
>>> >
>>> > # remoção de todas as linhas contendo NA
>>> > dadf <- na.omit(dad)
>>> >
>>> > # remoção das linhas de forma mais criteriosa
>>> > dadf <- subset(dadf,
>>> >               Idade < 2.5*(median(dadf[, 1])) &
>>> >               Idade > 0                       &
>>> >               Tempo < 2.5*(median(dadf[, 2])) &
>>> >               Tempo > 0)
>>> > str(dadf)
>>> > boxplot(dadf, range=2.5) # verificar remoção de outiliers
>>> >
>>> > Usei 2.5*mediana apenas por simpicidade didática.
>>> > Você poderia usar um critério mais consistente, por exemplo, um
>>> > múltiplo (1.5 a 2.5) da distância interquartílica.
>>> >
>>> > Veja com calcular os quatis no R coma  função quantile:
>>> >> ?quantile
>>> >
>>> > Abs,
>>> > --
>>> > ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
>>> > Jose Claudio Faria
>>> > Estatistica - Prof. Pleno
>>> > UESC/DCET/Brasil
>>> > joseclaudio.faria at gmail.com
>>> > ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
>>> >
>>> >
>>> >
>>> > Em 25 de julho de 2011 10:45, Vinicius Brito Rocha
>>> > <viniciusbritor em gmail.com> escreveu:
>>> >> Srs,
>>> >>
>>> >> tenho uma data.frame onde preciso realizar um filtro do mesmo, a
>>> >> partir de
>>> >> uma das variáveis categóricas. Porém tenho uma lista de restrições
>>> >> dessa
>>> >> variável à filtrar.
>>> >> Escrever uma a uma cada restrição dará muito trabalho.
>>> >>
>>> >> Alguém sabe como posso fazer isso de forma mais inteligente?
>>> >>
>>> >> Abs
>>> >>
>>> >> --
>>> >> Vinicius Brito Rocha.
>>> >> Estatístico e Atuário,
>>> >> Mestre em Pesquisa Operacional
>>> >>
>>> >> www.aplicademic.blogspot.com
>>> >> http://twitter.com/viniciusbritor
>>> >>
>>> >> "Não se preocupe muito com as suas dificuldades em Matemática, posso
>>> >> assegurar-lhe que as minhas são ainda maiores." - Albert Einstein.
>>> >>
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> R-br mailing list
>>> >> R-br em 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 em 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.
>>
>>
>>
>> --
>> Vinicius Brito Rocha.
>> Estatístico e Atuário,
>> Mestre em Pesquisa Operacional
>>
>> www.aplicademic.blogspot.com
>> http://twitter.com/viniciusbritor
>>
>> "Não se preocupe muito com as suas dificuldades em Matemática, posso
>> assegurar-lhe que as minhas são ainda maiores." - Albert Einstein.
>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em 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 em 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.
>



-- 
Successful people ask better questions, and as a result, they get
better answers. (Tony Robbins)


Mais detalhes sobre a lista de discussão R-br