[R-br] Ajuda com substituição de valores em um data frame

Benilton Carvalho beniltoncarvalho em gmail.com
Quarta Setembro 12 11:47:10 BRT 2012


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 em 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 em ufpr.br
> skype: walmeszeviani
> twitter: @walmeszeviani
> homepage: http://www.leg.ufpr.br/~walmes
> linux user number: 531218
> ==========================================================================
>
>
> 2012/9/11 <elisabpereira em 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 em 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 detalhes sobre a lista de discussão R-br