[R-br] Filtro em massa (subset)

Rodrigo Coster rcoster em gmail.com
Segunda Julho 25 20:02:20 BRT 2011


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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110725/28537daf/attachment.html>


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