
Boa noite a todos. Sou novo em programação e estou tentando montar um for loop, então gostaria de pedir ajuda aos que estão familiarizados com isso. A explicação abaixo é longa, mas há poucos códigos de programação. Desde já agradeço aos que puderem ajudar. Isso é muito importante pra mim. ---- # Salve o arquivo "www.datafilehost.com/download-ce4b3fc2.html" no seu diretório de trabalho e leia-o da seguinte forma:
Pop = read.csv(file = "nist.csv", row.names = 1)
# Pop = meu conjunto de dados (dataset). Cada 2 colunas é uma unidade de análise, ou seja, preciso analisar os dados de duas em duas colunas. Pode-se observar que as colunas de uma unidade tem o mesmo nome, diferenciadas por .1 e .2 # Nomes = níveis de dados presentes na 1ª unidade (1ª e 2ª colunas). Vou usar isso para nomear as linhas e colunas da matriz que vem adiante.
Nomes = levels(factor(c(Pop[,1], Pop[,2])))
# matrix ObsV = Valores observados para a 1ª unidade. Aqui, estou criando uma matriz de "0" (zeros) e depois usando um loop para preenche-la com os valores do meu dataset.
ObsV = matrix(0, nrow = length(Nomes), ncol = length(Nomes), dimnames = list(Nomes, Nomes))
for(i in 1:nrow(Pop[,1:2])) { ObsV[paste(Pop[i,1]), paste(Pop[i,2])] = ObsV[paste(Pop[i,1]), paste(Pop[i,2])] + 1 } ObsV
# Muito simples: Leia a 1ª unidade de dados do dataset: quando aparecem na 1ª linha os valores 13 - 14 é somado +1 no spot "linha 13, coluna 14" da matriz ObsV. E assim por diante contando todos os valores observados. Então, se no spot "linha 10, coluna 14" da matrix ObsV eu tenho o valor 11, isso é porque o valor 10 - 14 apareceu 11 vezes no meu dataset. # Isso funciona bem pra mim. Mas eu preciso fazer isso funcionar para todo o dataset de uma vez só, sempre trabalhando de duas em duas colunas. Ou seja, como tenho 30 colunas, preciso produzir 15 matrizes como a ObsV. # Eu pensei em por esse loop dentro de outro loop como for(j in ncol(Pop)) {}, mas não to conseguindo escrever isso e também preciso saber como modificar minhas variáveis, como "N" e "Nomes" para que funcionem para todos os marcadores. #todos os códigos acima podem ser substituídos pelos códigos abaixo, produzindo os mesmo resultados. Se for mais fácil resolver assim.
Pop = read.csv("nist.csv", row.names=1) Nomes = levels(factor(c(pop[,1], pop[,2]))) ObsV = table(factor(Pop[,1], levels = Nomes), factor(Pop[,2], levels = Nomes)) ObsV
Obrigado, Vitor Rezende da Costa Aguiar --------------------------------------------------- PhD student in Biotechnology Rede Nordeste de Biotecnologia Universidade Federal do Espírito Santo --------------------------------------------------- Current Adress: Department of Integrative Biology University of California, Berkeley 2033 Valley Life Sciences Building, office 4134 Berkeley, CA - USA 94720 Phone: 1 (510)-643-0060

Desde que os nomes dos grupos nao sejam ambiguos: grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop))) tabelaPorGrupo <- function(grp, dat){ cols <- grep(grp, names(dat)) Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]]))) table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]], levels=Nomes)) } tabelas <- lapply(grupos, tabelaPorGrupo, Pop) names(tabelas) <- grupos tabelas b

Muito boa alternativa. Muito obrigado Benilton! On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop))) tabelaPorGrupo <- function(grp, dat){ cols <- grep(grp, names(dat)) Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]]))) table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]], levels=Nomes)) } tabelas <- lapply(grupos, tabelaPorGrupo, Pop) names(tabelas) <- grupos tabelas
b _______________________________________________ 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.

Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço. # Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement... file: http://www.datafilehost.com/download-9a400f40.html pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 } On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop))) tabelaPorGrupo <- function(grp, dat){ cols <- grep(grp, names(dat)) Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]]))) table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]], levels=Nomes)) } tabelas <- lapply(grupos, tabelaPorGrupo, Pop) names(tabelas) <- grupos tabelas
b _______________________________________________ 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, eu nao consigo entender o q vc quer fazer/dizer... o codigo que eu havia recomendado nao produz NA, ate' onde eu me lembro. ou sera' q vc esta' se referindo a casos onde toda a coluna e' faltante? x = rep(NA, 5) y = sample(letters[1:3], 5, rep=T) table(x, y) eh isso? b 2012/3/23 Vitor Aguiar <vitor.aguiar@me.com>:
Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço.
# Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement...
file: http://www.datafilehost.com/download-9a400f40.html
pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 }
On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop)))
tabelaPorGrupo <- function(grp, dat){
cols <- grep(grp, names(dat))
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]],
levels=Nomes))
}
tabelas <- lapply(grupos, tabelaPorGrupo, Pop)
names(tabelas) <- grupos
tabelas
b
_______________________________________________
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.

Você está certo Benilton. O seu método não produz NAs. Mas como disse, sou biólogo e novo em programação... eu preciso expandir esse código incluindo outras análises, e eu não consegui fazer isso usando regular expressions, pois eu entendo pouco sobre elas, e então tentei por outro caminho, não tão elegante quanto o seu. Mas eu tentarei focar em aprender isso agora. Muito obrigado pela pronta resposta! Vitor On Mar 23, 2012, at 3:23 PM, Benilton Carvalho wrote:
Vitor,
eu nao consigo entender o q vc quer fazer/dizer... o codigo que eu havia recomendado nao produz NA, ate' onde eu me lembro.
ou sera' q vc esta' se referindo a casos onde toda a coluna e' faltante?
x = rep(NA, 5) y = sample(letters[1:3], 5, rep=T) table(x, y)
eh isso?
b
2012/3/23 Vitor Aguiar <vitor.aguiar@me.com>:
Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço.
# Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement...
file: http://www.datafilehost.com/download-9a400f40.html
pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 }
On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop)))
tabelaPorGrupo <- function(grp, dat){
cols <- grep(grp, names(dat))
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]],
levels=Nomes))
}
tabelas <- lapply(grupos, tabelaPorGrupo, Pop)
names(tabelas) <- grupos
tabelas
b
_______________________________________________
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.

Bom, eu gostaria então de fazer outra pergunta simples. O arquivo da última mensagem ("http://www.datafilehost.com/download-9a400f40.html") tem alguns valores em branco (NA). Eu gostaria de analisar esses dados com um loop e, dentro desse loop, incluir a condição "se o valor for NA, desconsiderar e analisar o próximo valor". Faço isso com if( )? Alguém pode ajudar como escrever? PS: Acho q não precisa nem abrir o arquivo pra responder, é só uma pergunta teórica. Muito Obrigado, Vitor Nesses dados: On Mar 23, 2012, at 4:57 PM, Vitor Aguiar wrote:
Você está certo Benilton. O seu método não produz NAs. Mas como disse, sou biólogo e novo em programação... eu preciso expandir esse código incluindo outras análises, e eu não consegui fazer isso usando regular expressions, pois eu entendo pouco sobre elas, e então tentei por outro caminho, não tão elegante quanto o seu. Mas eu tentarei focar em aprender isso agora. Muito obrigado pela pronta resposta!
Vitor
On Mar 23, 2012, at 3:23 PM, Benilton Carvalho wrote:
Vitor,
eu nao consigo entender o q vc quer fazer/dizer... o codigo que eu havia recomendado nao produz NA, ate' onde eu me lembro.
ou sera' q vc esta' se referindo a casos onde toda a coluna e' faltante?
x = rep(NA, 5) y = sample(letters[1:3], 5, rep=T) table(x, y)
eh isso?
b
2012/3/23 Vitor Aguiar <vitor.aguiar@me.com>:
Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço.
# Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement...
file: http://www.datafilehost.com/download-9a400f40.html
pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 }
On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop)))
tabelaPorGrupo <- function(grp, dat){
cols <- grep(grp, names(dat))
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]],
levels=Nomes))
}
tabelas <- lapply(grupos, tabelaPorGrupo, Pop)
names(tabelas) <- grupos
tabelas
b
_______________________________________________
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.

Se fosse apenas um valor escalar armazenado numa variavel chamada 'x': ## para fazer algo com os NAs if (is.na(x)) faca isso ## para fazer algo com qq valor q nao seja NA if (!is.na(x)) faca aquilo b 2012/3/26 Vitor Aguiar <vitor.aguiar@me.com>:
Bom, eu gostaria então de fazer outra pergunta simples. O arquivo da última mensagem ("http://www.datafilehost.com/download-9a400f40.html") tem alguns valores em branco (NA). Eu gostaria de analisar esses dados com um loop e, dentro desse loop, incluir a condição "se o valor for NA, desconsiderar e analisar o próximo valor". Faço isso com if( )? Alguém pode ajudar como escrever?
PS: Acho q não precisa nem abrir o arquivo pra responder, é só uma pergunta teórica.
Muito Obrigado, Vitor
Nesses dados: On Mar 23, 2012, at 4:57 PM, Vitor Aguiar wrote:
Você está certo Benilton. O seu método não produz NAs. Mas como disse, sou biólogo e novo em programação... eu preciso expandir esse código incluindo outras análises, e eu não consegui fazer isso usando regular expressions, pois eu entendo pouco sobre elas, e então tentei por outro caminho, não tão elegante quanto o seu. Mas eu tentarei focar em aprender isso agora. Muito obrigado pela pronta resposta!
Vitor
On Mar 23, 2012, at 3:23 PM, Benilton Carvalho wrote:
Vitor,
eu nao consigo entender o q vc quer fazer/dizer... o codigo que eu havia recomendado nao produz NA, ate' onde eu me lembro.
ou sera' q vc esta' se referindo a casos onde toda a coluna e' faltante?
x = rep(NA, 5) y = sample(letters[1:3], 5, rep=T) table(x, y)
eh isso?
b
2012/3/23 Vitor Aguiar <vitor.aguiar@me.com>:
Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço.
# Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement...
file: http://www.datafilehost.com/download-9a400f40.html
pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 }
On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop)))
tabelaPorGrupo <- function(grp, dat){
cols <- grep(grp, names(dat))
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]],
levels=Nomes))
}
tabelas <- lapply(grupos, tabelaPorGrupo, Pop)
names(tabelas) <- grupos
tabelas
b
_______________________________________________
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.

Mais uma vez muito obrigado. Vitor On Mar 26, 2012, at 3:33 AM, Benilton Carvalho wrote:
Se fosse apenas um valor escalar armazenado numa variavel chamada 'x':
## para fazer algo com os NAs if (is.na(x)) faca isso
## para fazer algo com qq valor q nao seja NA if (!is.na(x)) faca aquilo
b
2012/3/26 Vitor Aguiar <vitor.aguiar@me.com>:
Bom, eu gostaria então de fazer outra pergunta simples. O arquivo da última mensagem ("http://www.datafilehost.com/download-9a400f40.html") tem alguns valores em branco (NA). Eu gostaria de analisar esses dados com um loop e, dentro desse loop, incluir a condição "se o valor for NA, desconsiderar e analisar o próximo valor". Faço isso com if( )? Alguém pode ajudar como escrever?
PS: Acho q não precisa nem abrir o arquivo pra responder, é só uma pergunta teórica.
Muito Obrigado, Vitor
Nesses dados: On Mar 23, 2012, at 4:57 PM, Vitor Aguiar wrote:
Você está certo Benilton. O seu método não produz NAs. Mas como disse, sou biólogo e novo em programação... eu preciso expandir esse código incluindo outras análises, e eu não consegui fazer isso usando regular expressions, pois eu entendo pouco sobre elas, e então tentei por outro caminho, não tão elegante quanto o seu. Mas eu tentarei focar em aprender isso agora. Muito obrigado pela pronta resposta!
Vitor
On Mar 23, 2012, at 3:23 PM, Benilton Carvalho wrote:
Vitor,
eu nao consigo entender o q vc quer fazer/dizer... o codigo que eu havia recomendado nao produz NA, ate' onde eu me lembro.
ou sera' q vc esta' se referindo a casos onde toda a coluna e' faltante?
x = rep(NA, 5) y = sample(letters[1:3], 5, rep=T) table(x, y)
eh isso?
b
2012/3/23 Vitor Aguiar <vitor.aguiar@me.com>:
Gostaria de pedir ajuda novamente sobre o mesmo problema. Talvez Benilton ou outro usuário de loops possam ajudar. Acho que a resposta é muito simples. Desde já agradeço.
# Usando o arquivo abaixo com algumas células em branco (pois o valor não existe). Então o loop abaixo não funciona. Eu gostaria que o loop corresse pelo arquivo e, quando encontrasse um valor faltando, ele ignorasse e pulasse para o próximo valor, sem produzir um NA no meu output. Talvez usar if statement...
file: http://www.datafilehost.com/download-9a400f40.html
pop = read.csv("file.csv", row.names = 1) counter = 1 while (counter < length(names(pop))) { N = length(c(pop[ ,counter])) Names = levels(factor(c(pop[ ,counter], pop[ ,counter + 1]))) ObsGen = matrix(0, nrow = length(Names), ncol = length(Names), dimnames = list(Names, Names)) for(i in 1:N) { ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] = ObsGen[paste(pop[i, counter]), paste(pop[i, counter + 1])] + 1 } print(ObsGen) counter = counter + 2 }
On Mar 12, 2012, at 11:55 AM, Vitor Aguiar wrote:
Muito boa alternativa. Muito obrigado Benilton!
On Mar 12, 2012, at 3:51 AM, Benilton Carvalho wrote:
Desde que os nomes dos grupos nao sejam ambiguos:
grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop)))
tabelaPorGrupo <- function(grp, dat){
cols <- grep(grp, names(dat))
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]],
levels=Nomes))
}
tabelas <- lapply(grupos, tabelaPorGrupo, Pop)
names(tabelas) <- grupos
tabelas
b
_______________________________________________
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.
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)
-
Benilton Carvalho
-
Vitor Aguiar