
A resposta dada na lista havia sido de usar o comando 'recode'. Alternativamente, se vc precisa apenas recodificar seus nucleotideos: ## Gerando dados de exemplo por falta de CMR set.seed(1) alelos = c('a', 'c', 'g', 't') mydf = function(...) data.frame(..., stringsAsFactors=FALSE) dataframe = do.call(mydf, lapply(1:329, function(i) sample(alelos, 21, rep=T))) names(dataframe) = paste('c', sprintf('%03d', 1:329), sep='') ## solucao res = sapply(dataframe, function(v) ifelse(v %in% c('a', 'g'), 1L, 2L)) b 2012/9/12 Walmes Zeviani <walmes@ufpr.br>:
Olá. É mais interessante que você envie suas dúvidas para a lista pois (1) você pode obter diversas soluções (2) você pode ser respondida em menos tempo (3) sua mensagem pode interessar a mais pessoas (4) ela fica no histórico da lista para consulta futura. Segue uma possível solução usando match().
da <- matrix(sample(c("a","c","g","t"), 20, replace=TRUE), ncol=5) da
typeof(da) # matrix de character, converter seu data.frame para matriz com as.matrix()
atual <- c("a","c","g","t") recod <- c(1,2,1,2) data.frame(atual, recod)
indic <- match(da, atual) # matriz de indices db <- matrix(recod[indic], nrow=nrow(da)) db # matriz recodificada, as.data.frame(db) # pode ser convertida para data.frame com as.data.frame
À 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 ==========================================================================
2012/9/11 <elisabpereira@gmail.com>
Olá,
tudo bem? Desculpe enviar um e-mail diretamente para você, mas já enviei minha dúvida para o fórum do R e não consegui resolver meu problema. Vi que vc ajuda muitas pessoas por aqui, e se não for pedir muito, também queria uma ajudinha.
Tenho um data frame de 21 linhas e 329 colunas. As células do data frame são compostas pelos caracteres "a", "c", "g" ou "t". Quero fazer com que as células preenchidas pelos caracteres "a" ou "g" sejam substituídas pelo numeral 1, e as células com os caracteres "c" ou "t" sejam substituídas por 2.
Quando uso: ifelse(dataframe=="a",1,0)
Nesse caso, as células com "a" são substituídas pelo valor 1 e as demais são substituídas por 0. Tem alguma forma de fazer com q elas sejam substituídas por 1 e que o restante permaneça como está? Desta forma eu poderia usar o ifelse quatro vezes, uma para cada caracter. Também tentei usar: if (dataframe=="a") {1} else if (dataframe=="g") {1} else if (dataframe=="t") {2} else if (dataframe=="c") {2} Mas recebo o seguinte warning: "a condição tem comprimento > 1 e somente o primeiro elemento será usado"
Também tentei usar o recode, mas não consegui fazer funcionar.
Muito 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.