[R-br] eliminar valores de data.frame

Paulo Nogueira paulons em gmail.com
Quinta Maio 24 09:04:50 BRT 2012


André, assim fica até mais simples, pois é possível alterar os valores
no próprio data.frame (ou matriz) uma vez que as dimensões são
mantidas.

Veja:

# Exemplo de dados
dados<-trunc(rnorm(30*100000,30,5))
attr(dados, 'dim')<-c(100000,30)
##

for (i in seq(1,30,by=2)) {

  t<-table(dados[,c(i,i+1)])
  n<-attributes(t[t<5])$dimnames[[1]]

  dados[dados[,(i)]%in%as.numeric(n),i]<-NA
  dados[dados[,(i+1)]%in%as.numeric(n),i+1]<-NA
}


Abraços,
Paulo Nogueira Starzynski

Em 23/05/12, Vitor Aguiar<vitor.aguiar em me.com> escreveu:
> OK Paulo,
>
> agora entendi o que o programa está fazendo. Realmente funciona, eliminando
> corretamente os valores.
> Muito Obrigado.
>
> Porém, para uma outra aplicação desses dados, percebi que será essencial não
> eliminar os valores, mas transforma-los em NA (um dado em branco), pois
> preciso que seja mantida a estrutura do dataframe com o length original de
> cada coluna.
>
> É possível usar essa primeira parte do seu for loop e, de alguma forma,
> criar um novo dataframe "dados" onde os valores com frequência menor que 5
> são substituídos por NA?
>
>
> Vitor
>
>
> On May 22, 2012, at 7:27 PM, Paulo Nogueira wrote:
>
>> Vitor,
>> você faz bem de tentar entender os códigos que o pessoal coloca no grupo
>> ao invés de apenas roda-los.
>> É uma ótima forma de aprender R.
>>
>> Você disse que sua base tem 30 colunas. O programa que escrevi gera 30
>> vetores chamados Coluna1, Coluna2, ..., Coluna30 que contém o que os
>> elementos que você precisa, segundo seu primeiro e-mail.
>>
>> abraços,
>> Paulo
>>
>> Em 22 de maio de 2012 21:32, Vitor Aguiar <vitor.aguiar em me.com> escreveu:
>> > Olá Paulo,
>> >
>> > muito obrigado.
>> >
>> > Como eu estou apenas aprendendo programação, testei o seu código mas
>> > ainda estou tentando compreender o resultado. Como assim gerar 30
>> > vetores na área de trabalho?
>> >
>> > Pensei em outra coisa que também resolveria minha situação: substituir
>> > todos os valores que aparecem menos que 5 vezes no conjunto de dados por
>> > NA. Seria mais simples fazer isso?
>> >
>> >
>> > Obrigado,
>> > Vitor
>> >
>> >
>> >
>> > On May 22, 2012, at 11:04 AM, Paulo Nogueira wrote:
>> >
>> >> Vitor,
>> >> você não mandou um CMR, mas assumindo que as colunas são comparadas
>> >> duas a duas (coluna1 x coluna2, coluna3 x coluna4, etc) o programa
>> >> abaixo deve resolver a situação.
>> >> Serão gerados 30 vetores na área de trabalho.
>> >>
>> >> Faça os testes.
>> >>
>> >>
>> >> # Exemplo de dados
>> >> dados<-trunc(rnorm(30*100000,30,5))
>> >> attr(dados, 'dim')<-c(100000,30)
>> >> ##
>> >>
>> >> for (i in seq(1,30,by=2)) {
>> >>
>> >>  t<-table(dados[,c(i,i+1)])
>> >>  n<-attributes(t[t<5])$dimnames[[1]]
>> >>
>> >>
>> >> assign(paste('Coluna',i,sep=''),dados[!dados[,(i)]%in%as.numeric(n),i])
>> >>
>> >> assign(paste('Coluna',i+1,sep=''),dados[!dados[,(i+1)]%in%as.numeric(n),(i+1)])
>> >> }
>> >>
>> >>
>> >> Em 21/05/12, Vitor Aguiar<vitor.aguiar em me.com> escreveu:
>> >>> Caros,
>> >>>
>> >>> tenho um data frame com 30 colunas e 100 mil linhas, composto de
>> >>> valores
>> >>> numéricos de 1 a 65. Gostaria de eliminar todos os valores que
>> >>> aparecem
>> >>> menos de 5 vezes, em cada 2 colunas consecutivas separadamente.
>> >>>
>> >>> Por exemplo, se o valor "18" aparece 4 vezes entre os 200.000 valores
>> >>> das
>> >>> minhas 2 primeiras colunas, eu gostaria de eliminar todos os 4.
>> >>>
>> >>> Eu sei que no final eu teria colunas de lengths diferentes no meu
>> >>> data
>> >>> frame, mas eu não preciso recriar o data frame, eu só preciso usar os
>> >>> pares
>> >>> de colunas separadamente.
>> >>>
>> >>> Como fazer isso?
>> >>>
>> >>> Desde já, muito obrigado aos que puderem ajudar.
>> >>>
>> >>>
>> >>> Vitor Aguiar
>> >>>
>> >>>
>> >> _______________________________________________
>> >> 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.
>>
>> _______________________________________________
>> 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.
>
>
>


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