
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@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@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@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@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.