
Olá, Estou trabalhando neste código aqui: Código: # Para selecionar o vm_data>0 rownames.positive <- function(data, i) { return <- colnames(data)[!is.na(data[i,])] } # Para selecionar os rets>0 rownames.positive1 <- function(data, j) { return <- colnames(data)[!is.na(data[j,])] } valid.tickers <- function(vm_data,rets, years, years1) { #years = rownames(vm_data), years1 = rownames(rets) nomeativos <- list() for (i in 1:dim(vm_data)[[1]]){ for (j in 1: dim(rets)[[1]]){ # i=2; j=42 a <- rownames.positive(vm_data, years[i]) b <- rownames.positive1(rets[,a], years1[j]) nomeativos[[j]] <- b }} names(nomeativos)<-years1[1:j] return(nomeativos) } Estou tentando fazer dois filtros em um banco de dados, no qual primeiro verifico se existe vm_data>0 através da função rownames.positive e, consequentemente, para os ativos que passaram neste filtro, aplico a função rownames.positive1 para identificar rets>0. Com isso, uso a função valid.tickers para aplicar os dois filtros e retornar uma lista com apenas os ativos (AT) válidos. Minhas variáveis vm_data e rets estao abaixo: vm_data At1 At2 At3 At4 At5 At6 2000-01-01 NA 7.478553 106.05138 154.9142 246.72923 84.74537 2000-02-01 56.45321 22.248116 49.97758 124.3428 100.43189 57.89444 2000-03-01 10.53851 222.545990 15.49008 36.3656 47.19245 51.59810 head(rets,10) At1 At2 At3 At4 At5 At6 2000-01-01 -0.84032326 1.18251249 0.2791886 -0.3506028 -1.2780974 0.61644019 2000-01-03 1.93239850 -0.05272626 0.2532625 1.3811129 1.1809074 -2.00703218 2000-01-04 0.56596405 0.36471560 1.2898374 1.0211276 -1.0492678 -0.13936848 2000-01-05 -0.72244969 -2.13653307 0.6436690 -1.4931114 1.4653181 -0.65127247 2000-01-06 -0.15135535 -1.15261317 0.1577168 0.1466359 1.4614018 1.29129399 2000-01-07 0.08811143 -0.93320399 -0.6568275 -1.1365693 -0.1147392 1.16723028 2000-01-08 -1.01018908 -0.79147444 -0.2458063 0.6530664 -0.2351105 -1.56632861 2000-01-10 -1.41642902 -0.73998066 NA -0.1959526 1.6433762 -1.83665410 2000-01-11 -1.88839674 -1.07155233 -0.9909747 1.5976778 1.1155120 0.02490766 2000-01-12 -0.68444922 -0.69488280 -0.3216356 0.0174740 -0.2322832 0.48464970 tail(rets) At1 At2 At3 At4 At5 At6 2000-02-29 -0.061260477 0.3558457 1.0351393 0.5690812 -0.5696858 -0.4889139 2000-03-01 1.023446137 0.2470349 0.2481944 0.7226727 0.9731186 -0.6501507 O problema que não estou conseguindo resolver é que meu "for" para o contador j está errado. Quero que para cada i (mês) de vm_data selecionar apenas os rets>0 para os dias desse respectivo mês usando contador j. Da forma como está no meu código valid.tickers está retornando através de nomeativos que na data $'2000 - 01 - 01 os AT de 1 a 6 passaram nos dois filtros, o que não é verdade, pois para todo o mês 01, o AT1 já não deveria aparecer, pois a variável vm_data na linha 1 tem AT1 = NA. Assim, valid.tickers parece armazenar apenas o i=3 para j= 1:dim(rets)[[1]], pois se eu fizer manualmente i=1 e j=1, o resultado está correto, mas quando uso o "for" não. Portanto, como posso fazer i=1,2 e 3 sendo que para cada i quero delimitar que o contador j possa varrer apenas aquelas observações da variável rets nas quais o mês e ano de rets são iguais aos de i? Quero um resultado final com uma lista de length=52, que é a dim(rets)[[1]], no qual, por exemplo, nomeativos[[j]] = b retorne que $'2000-01-01' os AT de 2 a 6 sao válidos (pois, vm_data para o mês 01 no AT1 = NA e no rets todos os demais AT são maiores que zero), de igual maneira, $'2000-02-18' retorne apenas os AT 1, 2, 4, 5 e 6 (pois, não há NA no vm_data para o mês 2, mas há um NA na variável rets para o AT3 nessa data). Obrigada pela ajuda!

Carolina, Dê uma olhada na resposta que dei para o Franklin na trédi "Dúvida com lógica booleana" 2015-08-10 9:17 GMT-03:00 Carolina Magda Roma <carolina.magda.adm@gmail.com> :
Olá,
Estou trabalhando neste código aqui:
Código:
# Para selecionar o vm_data>0 rownames.positive <- function(data, i) { return <- colnames(data)[!is.na(data[i,])] }
# Para selecionar os rets>0 rownames.positive1 <- function(data, j) { return <- colnames(data)[!is.na(data[j,])] }
valid.tickers <- function(vm_data,rets, years, years1) { #years = rownames(vm_data), years1 = rownames(rets) nomeativos <- list() for (i in 1:dim(vm_data)[[1]]){ for (j in 1: dim(rets)[[1]]){ # i=2; j=42 a <- rownames.positive(vm_data, years[i]) b <- rownames.positive1(rets[,a], years1[j]) nomeativos[[j]] <- b }} names(nomeativos)<-years1[1:j] return(nomeativos) }
Estou tentando fazer dois filtros em um banco de dados, no qual primeiro verifico se existe vm_data>0 através da função rownames.positive e, consequentemente, para os ativos que passaram neste filtro, aplico a função rownames.positive1 para identificar rets>0. Com isso, uso a função valid.tickers para aplicar os dois filtros e retornar uma lista com apenas os ativos (AT) válidos.
Minhas variáveis vm_data e rets estao abaixo:
vm_data
At1 At2 At3 At4 At5 At6 2000-01-01 NA 7.478553 106.05138 154.9142 246.72923 84.74537 2000-02-01 56.45321 22.248116 49.97758 124.3428 100.43189 57.89444 2000-03-01 10.53851 222.545990 15.49008 36.3656 47.19245 51.59810
head(rets,10) At1 At2 At3 At4 At5 At6 2000-01-01 -0.84032326 1.18251249 0.2791886 -0.3506028 -1.2780974 0.61644019 2000-01-03 1.93239850 -0.05272626 0.2532625 1.3811129 1.1809074 -2.00703218 2000-01-04 0.56596405 0.36471560 1.2898374 1.0211276 -1.0492678 -0.13936848 2000-01-05 -0.72244969 -2.13653307 0.6436690 -1.4931114 1.4653181 -0.65127247 2000-01-06 -0.15135535 -1.15261317 0.1577168 0.1466359 1.4614018 1.29129399 2000-01-07 0.08811143 -0.93320399 -0.6568275 -1.1365693 -0.1147392 1.16723028 2000-01-08 -1.01018908 -0.79147444 -0.2458063 0.6530664 -0.2351105 -1.56632861 2000-01-10 -1.41642902 -0.73998066 NA -0.1959526 1.6433762 -1.83665410 2000-01-11 -1.88839674 -1.07155233 -0.9909747 1.5976778 1.1155120 0.02490766 2000-01-12 -0.68444922 -0.69488280 -0.3216356 0.0174740 -0.2322832 0.48464970
tail(rets)
At1 At2 At3 At4 At5 At6 2000-02-29 -0.061260477 0.3558457 1.0351393 0.5690812 -0.5696858 -0.4889139 2000-03-01 1.023446137 0.2470349 0.2481944 0.7226727 0.9731186 -0.6501507
O problema que não estou conseguindo resolver é que meu "for" para o contador j está errado. Quero que para cada i (mês) de vm_data selecionar apenas os rets>0 para os dias desse respectivo mês usando contador j. Da forma como está no meu código valid.tickers está retornando através de nomeativos que na data $'2000 - 01 - 01 os AT de 1 a 6 passaram nos dois filtros, o que não é verdade, pois para todo o mês 01, o AT1 já não deveria aparecer, pois a variável vm_data na linha 1 tem AT1 = NA. Assim, valid.tickers parece armazenar apenas o i=3 para j= 1:dim(rets)[[1]], pois se eu fizer manualmente i=1 e j=1, o resultado está correto, mas quando uso o "for" não.
Portanto, como posso fazer i=1,2 e 3 sendo que para cada i quero delimitar que o contador j possa varrer apenas aquelas observações da variável rets nas quais o mês e ano de rets são iguais aos de i? Quero um resultado final com uma lista de length=52, que é a dim(rets)[[1]], no qual, por exemplo, nomeativos[[j]] = b retorne que $'2000-01-01' os AT de 2 a 6 sao válidos (pois, vm_data para o mês 01 no AT1 = NA e no rets todos os demais AT são maiores que zero), de igual maneira, $'2000-02-18' retorne apenas os AT 1, 2, 4, 5 e 6 (pois, não há NA no vm_data para o mês 2, mas há um NA na variável rets para o AT3 nessa data).
Obrigada pela ajuda!
_______________________________________________ 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)
-
Carolina Magda Roma
-
Cesar Rabak