eliminar valores de data.frame

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

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

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.

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.

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.

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.

Paulo, muito obrigado mesmo pela ajuda! Funciona muito bem. Resolvido! Vitor On May 24, 2012, at 5:04 AM, Paulo Nogueira wrote:
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.
_______________________________________________ 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.
participantes (2)
-
Paulo Nogueira
-
Vitor Aguiar