
Pessoal, desculpem, mas não consigo rodar um script que o Walmes me passou. No exemplo, fica tudo bem, mas na real dá zebra. Acho que os objetos estão sendo considerados diferentemente. No exemplo tudo estava com factor. Passei tudo para factor. Nos exemplos os dois bancos eram data.frames. Mas quando faço a função em um a saída vem diferente da do outro. Por favor, alguém poderia me ajudar. Exemplo que apresentei nome=c("Teresa dos Santos","Paulo da Silva","Denis Henrique de Paula","Pedro dos Santos","Pedro Maia", "Maria do Carmo") idade=c("80","89","78","78","78","85") dataint=c("26","20","25","25","25","20") dados1=data.frame(nome,idade,dataint) dados1 str(dados1) nome1=dados1$nome # remover da,das,do,dos,de nome1=gsub(" d(a|e|o)s? ", " ", nome1) separado1=strsplit(as.character(nome1), split=" ") head(separado1) fa1=sapply(separado1, function(i){ n=length(i) if(n>2) return(c(i[1], paste(i[2:(n-1)],collapse=" "), i[n])) if(n==2) return(c(i[1], NA, i[n])) }) nomenovo1=t(fa1) nomenovo1=as.data.frame(nomenovo1) dim(nomenovo1) colnames(nomenovo1)=c("nome1","nome2","nome3") dados2=cbind(dados1,nomenovo1) head(dados2) Quando faço head para o fa1 no meu exemplo, retorna assim, que pelo pouco que sei de R, parece uma matriz
head(fa1) [,1] [,2] [,3] [,4] [,5] [,6] [1,] "Teresa" "Paulo" "Denis" "Pedro" "Pedro" "Maria" [2,] NA NA "Henrique" NA NA NA [3,] "Santos" "Silva" "Paula" "Santos" "Maia" "Carmo"
Já quando peço o head do fa do meu bancão, retorna assim e zebra tudo a partir daí.
head(fa) [[1]] [1] "HERALDO" "TAVARES" "SILVA"
[[2]] [1] "JUPITER" NA "SILVA" [[3]] [1] "JACI" NA "SANTOS" [[4]] [1] "MARCOS" "SILVA" "FILHO" [[5]] [1] "PAULO" "SILVA" "PORTO" [[6]] [1] "INACIO" "AVELINO" "BELO" Alguém tem ideia do que seja? Obrigada Fátima

Por algum motivo a *s*apply() não *simplificou* o resultado, ela testa se é possível simplicar e é o que diferencia ela da lapply(). Bem, você pode simplificar no final com do.call() do.call(rbind, fa) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Veja se o seu banco inclui nomes com apenas 1 palavra (essa seria a condição p sapply não simplificar). b On 9 Jan 2013 22:21, "Fátima Lima Paula" <fatima.lima.paula@gmail.com> wrote:
Pessoal, desculpem, mas não consigo rodar um script que o Walmes me passou. No exemplo, fica tudo bem, mas na real dá zebra. Acho que os objetos estão sendo considerados diferentemente. No exemplo tudo estava com factor. Passei tudo para factor. Nos exemplos os dois bancos eram data.frames. Mas quando faço a função em um a saída vem diferente da do outro. Por favor, alguém poderia me ajudar. Exemplo que apresentei
nome=c("Teresa dos Santos","Paulo da Silva","Denis Henrique de Paula","Pedro dos Santos","Pedro Maia", "Maria do Carmo") idade=c("80","89","78","78","78","85") dataint=c("26","20","25","25","25","20") dados1=data.frame(nome,idade,dataint) dados1 str(dados1) nome1=dados1$nome # remover da,das,do,dos,de nome1=gsub(" d(a|e|o)s? ", " ", nome1) separado1=strsplit(as.character(nome1), split=" ") head(separado1) fa1=sapply(separado1, function(i){ n=length(i) if(n>2) return(c(i[1], paste(i[2:(n-1)],collapse=" "), i[n])) if(n==2) return(c(i[1], NA, i[n])) }) nomenovo1=t(fa1) nomenovo1=as.data.frame(nomenovo1) dim(nomenovo1) colnames(nomenovo1)=c("nome1","nome2","nome3") dados2=cbind(dados1,nomenovo1) head(dados2)
Quando faço head para o fa1 no meu exemplo, retorna assim, que pelo pouco que sei de R, parece uma matriz
head(fa1) [,1] [,2] [,3] [,4] [,5] [,6] [1,] "Teresa" "Paulo" "Denis" "Pedro" "Pedro" "Maria" [2,] NA NA "Henrique" NA NA NA [3,] "Santos" "Silva" "Paula" "Santos" "Maia" "Carmo"
Já quando peço o head do fa do meu bancão, retorna assim e zebra tudo a partir daí.
head(fa) [[1]] [1] "HERALDO" "TAVARES" "SILVA"
[[2]] [1] "JUPITER" NA "SILVA"
[[3]] [1] "JACI" NA "SANTOS"
[[4]] [1] "MARCOS" "SILVA" "FILHO"
[[5]] [1] "PAULO" "SILVA" "PORTO"
[[6]] [1] "INACIO" "AVELINO" "BELO"
Alguém tem ideia do que seja? Obrigada Fátima
_______________________________________________ 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.

Foi exatamente o que aconteceu. Acabei de enviar o email. Acho que vou enlouquecer Em 10 de janeiro de 2013 11:47, Benilton Carvalho < beniltoncarvalho@gmail.com> escreveu:
Veja se o seu banco inclui nomes com apenas 1 palavra (essa seria a condição p sapply não simplificar). b On 9 Jan 2013 22:21, "Fátima Lima Paula" <fatima.lima.paula@gmail.com> wrote:
Pessoal, desculpem, mas não consigo rodar um script que o Walmes me passou. No exemplo, fica tudo bem, mas na real dá zebra. Acho que os objetos estão sendo considerados diferentemente. No exemplo tudo estava com factor. Passei tudo para factor. Nos exemplos os dois bancos eram data.frames. Mas quando faço a função em um a saída vem diferente da do outro. Por favor, alguém poderia me ajudar. Exemplo que apresentei
nome=c("Teresa dos Santos","Paulo da Silva","Denis Henrique de Paula","Pedro dos Santos","Pedro Maia", "Maria do Carmo") idade=c("80","89","78","78","78","85") dataint=c("26","20","25","25","25","20") dados1=data.frame(nome,idade,dataint) dados1 str(dados1) nome1=dados1$nome # remover da,das,do,dos,de nome1=gsub(" d(a|e|o)s? ", " ", nome1) separado1=strsplit(as.character(nome1), split=" ") head(separado1) fa1=sapply(separado1, function(i){ n=length(i) if(n>2) return(c(i[1], paste(i[2:(n-1)],collapse=" "), i[n])) if(n==2) return(c(i[1], NA, i[n])) }) nomenovo1=t(fa1) nomenovo1=as.data.frame(nomenovo1) dim(nomenovo1) colnames(nomenovo1)=c("nome1","nome2","nome3") dados2=cbind(dados1,nomenovo1) head(dados2)
Quando faço head para o fa1 no meu exemplo, retorna assim, que pelo pouco que sei de R, parece uma matriz
head(fa1) [,1] [,2] [,3] [,4] [,5] [,6] [1,] "Teresa" "Paulo" "Denis" "Pedro" "Pedro" "Maria" [2,] NA NA "Henrique" NA NA NA [3,] "Santos" "Silva" "Paula" "Santos" "Maia" "Carmo"
Já quando peço o head do fa do meu bancão, retorna assim e zebra tudo a partir daí.
head(fa) [[1]] [1] "HERALDO" "TAVARES" "SILVA"
[[2]] [1] "JUPITER" NA "SILVA"
[[3]] [1] "JACI" NA "SANTOS"
[[4]] [1] "MARCOS" "SILVA" "FILHO"
[[5]] [1] "PAULO" "SILVA" "PORTO"
[[6]] [1] "INACIO" "AVELINO" "BELO"
Alguém tem ideia do que seja? Obrigada Fátima
_______________________________________________ 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 (3)
-
Benilton Carvalho
-
Fátima Lima Paula
-
Walmes Zeviani