
Boa tarde, Estou com um problema de lógica para o uso do if. Meu intuito com este programa é separar por horário os valores do volume. O horário está escrito de maneira numérica e vai de 1 até 396. O valor máximo de volumes por horário é 126. Só que quando tento fazer rodar, vem a mensagem : Erro em if (AA.data$hora[k] == i) { : valor ausente onde TRUE/FALSE necessário Abaixo segue o programa. AA<-read.table("/Users/bau/Documents/Mestrado/teste/AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume")) hora<-as.numeric(AA$hora) AA.data<-data.frame(data=AA$data,hora=hora, preco=AA$preco, volume=AA$volume) write.table(AA.data,"testeteste.txt") matriz.dadosAA<-matrix(nrow=128,ncol=4) for(i in 1:4){ j<-1 for(k in 1:48935){ for(j in 1:126){ if(AA.data$hora[k]==i){ matriz.dadosAA[j,i]=AA.data$volume[k] j=j+1 } else { matriz.dadosAA[j,i]=0 j=j+1} k=k+1 } } } a<-matriz.dadosAA[,1] write.table(a,"a.txt") Muito obrigada, Michelle

OLÁ Faça um dput(seubancodedados) copie e cole a saída para que seus comandos possa ser replicados e possa lhe ajudar. Acredito que o que você deseja fazer pode ser feito com funções do pacote plyr ou lapply, o que torna muito mais eficiente. Em 4 de março de 2015 13:09, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Boa tarde,
Estou com um problema de lógica para o uso do if. Meu intuito com este programa é separar por horário os valores do volume. O horário está escrito de maneira numérica e vai de 1 até 396. O valor máximo de volumes por horário é 126. Só que quando tento fazer rodar, vem a mensagem : Erro em if (AA.data$hora[k] == i) { : valor ausente onde TRUE/FALSE necessário
Abaixo segue o programa.
AA<-read.table("/Users/bau/Documents/Mestrado/teste/AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume")) hora<-as.numeric(AA$hora) AA.data<-data.frame(data=AA$data,hora=hora, preco=AA$preco, volume=AA$volume) write.table(AA.data,"testeteste.txt")
matriz.dadosAA<-matrix(nrow=128,ncol=4) for(i in 1:4){
j<-1 for(k in 1:48935){ for(j in 1:126){ if(AA.data$hora[k]==i){
matriz.dadosAA[j,i]=AA.data$volume[k] j=j+1
} else {
matriz.dadosAA[j,i]=0 j=j+1}
k=k+1
} } } a<-matriz.dadosAA[,1] write.table(a,"a.txt")
Muito obrigada,
Michelle
_______________________________________________ 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.

Oi Fernando, Me desculpe mas você pode ser um pouco mais claro? Sou iniciante em R e por isso ainda tenho muita dificuldade. Em 4 de março de 2015 13:20, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
OLÁ
Faça um dput(seubancodedados) copie e cole a saída para que seus comandos possa ser replicados e possa lhe ajudar. Acredito que o que você deseja fazer pode ser feito com funções do pacote plyr ou lapply, o que torna muito mais eficiente.
Em 4 de março de 2015 13:09, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Boa tarde,
Estou com um problema de lógica para o uso do if. Meu intuito com este programa é separar por horário os valores do volume. O horário está escrito de maneira numérica e vai de 1 até 396. O valor máximo de volumes por horário é 126. Só que quando tento fazer rodar, vem a mensagem : Erro em if (AA.data$hora[k] == i) { : valor ausente onde TRUE/FALSE necessário
Abaixo segue o programa.
AA<-read.table("/Users/bau/Documents/Mestrado/teste/AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume")) hora<-as.numeric(AA$hora) AA.data<-data.frame(data=AA$data,hora=hora, preco=AA$preco, volume=AA$volume) write.table(AA.data,"testeteste.txt")
matriz.dadosAA<-matrix(nrow=128,ncol=4) for(i in 1:4){
j<-1 for(k in 1:48935){ for(j in 1:126){ if(AA.data$hora[k]==i){
matriz.dadosAA[j,i]=AA.data$volume[k] j=j+1
} else {
matriz.dadosAA[j,i]=0 j=j+1}
k=k+1
} } } a<-matriz.dadosAA[,1] write.table(a,"a.txt")
Muito obrigada,
Michelle
_______________________________________________ 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.

Qual a dimensão dos seus vetores? Você fala "O horário está escrito de maneira numérica e vai de 1 até 396", mas são números inteiros somente? Depois você cria uma matriz com 128 linhas e 4 colunas e os índices das funções "for" vão de 1 até 48935 (índice k) e de 1 até 126 (índice j). Nessa parte do seu código " if(AA.data$hora[k]==i)" você só estará testando horas iguais a 1, 2, 3 e 4 (e as outras até 396?). Além disso estão faltando 2 linhas na matriz (seu índice j vai só até 126). Em 4 de março de 2015 13:25, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Oi Fernando,
Me desculpe mas você pode ser um pouco mais claro? Sou iniciante em R e por isso ainda tenho muita dificuldade.
Em 4 de março de 2015 13:20, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
OLÁ
Faça um dput(seubancodedados) copie e cole a saída para que seus comandos possa ser replicados e possa lhe ajudar. Acredito que o que você deseja fazer pode ser feito com funções do pacote plyr ou lapply, o que torna muito mais eficiente.
Em 4 de março de 2015 13:09, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Boa tarde,
Estou com um problema de lógica para o uso do if. Meu intuito com este programa é separar por horário os valores do volume. O horário está escrito de maneira numérica e vai de 1 até 396. O valor máximo de volumes por horário é 126. Só que quando tento fazer rodar, vem a mensagem : Erro em if (AA.data$hora[k] == i) { : valor ausente onde TRUE/FALSE necessário
Abaixo segue o programa.
AA<-read.table("/Users/bau/Documents/Mestrado/teste/AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume")) hora<-as.numeric(AA$hora) AA.data<-data.frame(data=AA$data,hora=hora, preco=AA$preco, volume=AA$volume) write.table(AA.data,"testeteste.txt")
matriz.dadosAA<-matrix(nrow=128,ncol=4) for(i in 1:4){
j<-1 for(k in 1:48935){ for(j in 1:126){ if(AA.data$hora[k]==i){
matriz.dadosAA[j,i]=AA.data$volume[k] j=j+1
} else {
matriz.dadosAA[j,i]=0 j=j+1}
k=k+1
} } } a<-matriz.dadosAA[,1] write.table(a,"a.txt")
Muito obrigada,
Michelle
_______________________________________________ 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.
-- Rafael Garcia Cunha YNWA

Michelle é que para que os usuários da lista possam lhe ajudar é necessário que você forneça um CMR(código mínimo reproduzível) isso permite que possamos acessar seus dados e refazer os seus comandos e assim lhe orientar melhor. Você forneceu o código, no entanto eu não tenho como acessar seus dados, pois o endereço que vc forneceu no read.table não é o mesmo em meu computador. Por isso estou lhe solicitando que faça um dput(seusbancodedados). Após dar o enter esta função retornara seu banco de dados em um formato que todos os usuários poderam ter acesso apenas por copiar e colar esta saída no R. Você copia e cole no email essa saída e assim todos poderão utilizar seus dados e lhe ajudar de maneira mais rápida Você pode fornecer todo o banco de dados ou apenas parte dele (no caso de banco de dados muito grande). O importante é que os dados fornecidos possam ser reproduzidos pela pessoa que está lhe ajudando. Em 4 de março de 2015 13:25, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Oi Fernando,
Me desculpe mas você pode ser um pouco mais claro? Sou iniciante em R e por isso ainda tenho muita dificuldade.
Em 4 de março de 2015 13:20, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
OLÁ
Faça um dput(seubancodedados) copie e cole a saída para que seus comandos possa ser replicados e possa lhe ajudar. Acredito que o que você deseja fazer pode ser feito com funções do pacote plyr ou lapply, o que torna muito mais eficiente.
Em 4 de março de 2015 13:09, Michelle Bau Graczyk <mbgraczyk@gmail.com> escreveu:
Boa tarde,
Estou com um problema de lógica para o uso do if. Meu intuito com este programa é separar por horário os valores do volume. O horário está escrito de maneira numérica e vai de 1 até 396. O valor máximo de volumes por horário é 126. Só que quando tento fazer rodar, vem a mensagem : Erro em if (AA.data$hora[k] == i) { : valor ausente onde TRUE/FALSE necessário
Abaixo segue o programa.
AA<-read.table("/Users/bau/Documents/Mestrado/teste/AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume")) hora<-as.numeric(AA$hora) AA.data<-data.frame(data=AA$data,hora=hora, preco=AA$preco, volume=AA$volume) write.table(AA.data,"testeteste.txt")
matriz.dadosAA<-matrix(nrow=128,ncol=4) for(i in 1:4){
j<-1 for(k in 1:48935){ for(j in 1:126){ if(AA.data$hora[k]==i){
matriz.dadosAA[j,i]=AA.data$volume[k] j=j+1
} else {
matriz.dadosAA[j,i]=0 j=j+1}
k=k+1
} } } a<-matriz.dadosAA[,1] write.table(a,"a.txt")
Muito obrigada,
Michelle
_______________________________________________ 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.

Michelle, bom dia! Encaminho uma ideia de resolução com base no que pude entender e aproveitando a sugestão do colega Rubem. ### <code r> setwd("c:\\lab\\temp") AA <- read.table("AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume"), as.is=T) str(AA) AA$data <- as.Date(AA$data, "%d.%m.%Y") AA$hora <- format(strptime(AA$hora, "%H:%M:%S"), "%H:%M") AA$horaid <- as.numeric(as.factor(AA$hora)) ### valores utilizados no seu código original head(AA, 3) # data hora preco volume horaid # 1 01.07.2004 09:31 51.37 27900 1 # 2 01.07.2004 09:32 51.32 100 2 # 3 01.07.2004 09:33 51.45 700 3 # write.table(AA,"testeteste.txt") ### seleção de uma data simples AA[AA$hora=="09:31",] # AA[AA$horaid==1,] ### resultado equivalente ### reestruturando data.frame require(reshape2) AA2 <- dcast(AA, data~hora, value.var='volume') ### Utilizando texto das horas AA3 <- dcast(AA, data~horaid, value.var='volume') ### Utilizando índice das horas head(AA2[,1:8], 3) # data 09:31 09:32 09:33 09:34 09:35 09:36 09:37 # 1 2004-07-01 27900 100 700 1000 800 3000 1600 # 2 2004-07-02 145400 500 NA 500 6900 NA 4400 # 3 2004-07-06 3200 2300 3800 1500 NA 1100 3700 head(AA3[,1:8], 3) # data 1 2 3 4 5 6 7 # 1 2004-07-01 27900 100 700 1000 800 3000 1600 # 2 2004-07-02 145400 500 NA 500 6900 NA 4400 # 3 2004-07-06 3200 2300 3800 1500 NA 1100 3700 ### extra dObs <- unique(AA2$data); length(dObs) ### dias observados dEsp <- seq(min(dObs), max(dObs), by="day"); length(dEsp) ### dias esperados dEsp[!dEsp %in% dObs] ### dias faltantes ### </code>

Complemento pra ler os dados diretamente da net... ### <code r> url0 <- " https://dl.dropboxusercontent.com/u/117618178/tmp/AXP_NYS_USD_1min_EST5EDT_2... " AA <- read.table(url0, header=FALSE, col.names=c("data","hora","preco","volume"), as.is=T) ### </code>

Oi Éder! Me desculpe por estar respondendo só agora, mas é que só agora parei. Muito muito muuuuuito obrigada pela sua ajuda e por ter compartilhado a sua ídeia! Me ajudou muito mesmo! Beijo! 2015-03-06 8:36 GMT-03:00 Éder Comunello <comunello.eder@gmail.com>:
Michelle, bom dia!
Encaminho uma ideia de resolução com base no que pude entender e aproveitando a sugestão do colega Rubem.
### <code r> setwd("c:\\lab\\temp") AA <- read.table("AXP_NYS_USD_1min_EST5EDT_200407s12e.dat", header=FALSE, col.names=c("data","hora","preco","volume"), as.is=T) str(AA) AA$data <- as.Date(AA$data, "%d.%m.%Y") AA$hora <- format(strptime(AA$hora, "%H:%M:%S"), "%H:%M") AA$horaid <- as.numeric(as.factor(AA$hora)) ### valores utilizados no seu código original
head(AA, 3) # data hora preco volume horaid # 1 01.07.2004 09:31 51.37 27900 1 # 2 01.07.2004 09:32 51.32 100 2 # 3 01.07.2004 09:33 51.45 700 3
# write.table(AA,"testeteste.txt")
### seleção de uma data simples AA[AA$hora=="09:31",] # AA[AA$horaid==1,] ### resultado equivalente
### reestruturando data.frame require(reshape2) AA2 <- dcast(AA, data~hora, value.var='volume') ### Utilizando texto das horas AA3 <- dcast(AA, data~horaid, value.var='volume') ### Utilizando índice das horas
head(AA2[,1:8], 3) # data 09:31 09:32 09:33 09:34 09:35 09:36 09:37 # 1 2004-07-01 27900 100 700 1000 800 3000 1600 # 2 2004-07-02 145400 500 NA 500 6900 NA 4400 # 3 2004-07-06 3200 2300 3800 1500 NA 1100 3700
head(AA3[,1:8], 3) # data 1 2 3 4 5 6 7 # 1 2004-07-01 27900 100 700 1000 800 3000 1600 # 2 2004-07-02 145400 500 NA 500 6900 NA 4400 # 3 2004-07-06 3200 2300 3800 1500 NA 1100 3700
### extra dObs <- unique(AA2$data); length(dObs) ### dias observados dEsp <- seq(min(dObs), max(dObs), by="day"); length(dEsp) ### dias esperados dEsp[!dEsp %in% dObs] ### dias faltantes
### </code>
_______________________________________________ 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 (4)
-
Fernando Antonio de souza
-
Michelle Bau Graczyk
-
Rafael Garcia Cunha
-
Éder Comunello