Tengo un gran marco de datos de 1000 x 100000 como el siguiente para recodificar los valores numéricos.datos de recodificación en r
myd <- data.frame (v1 = sample (c("AA", "AB", "BB", NA), 10, replace = T),
v2 = sample (c("CC", "CG", "GG", NA), 10, replace = T),
v3 = sample (c("AA", "AT", "TT", NA) , 10, replace = T),
v4 = sample (c("AA", "AT", "TT", NA) , 10, replace = T),
v5 = sample (c("CC", "CA", "AA", NA) , 10, replace = T)
)
myd
v1 v2 v3 v4 v5
1 AB CC <NA> <NA> AA
2 AB CG TT TT AA
3 AA GG AT AT CA
4 <NA> <NA> <NA> AT <NA>
5 AA <NA> AA <NA> CA
6 BB <NA> TT TT CC
7 AA GG AA AT CA
8 <NA> GG <NA> AT CA
9 AA <NA> AT <NA> CC
10 AA GG TT AA CC
Cada variable tiene potencialmente cuatro valores únicos.
unique(myd$v1)
[1] AB AA <NA> BB
Levels: AA AB BB
unique(myd$v2)
[1] CC CG GG <NA>
Levels: CC CG GG
Tales valores únicos pueden ser cualquier combinación, sin embargo, consta de dos alfabetos (excepto NA). Por ejemplo, "A", "B" en el primer caso harán la combinación "AA", "AB", "BB". El código numérico para estos sería 1, 0, -1 respectivamente. De manera similar para el segundo caso, los alfabetos "C", "G" hacen "CC", "CG", "GG", por lo tanto los códigos numéricos serían 1, 0, -1 respectivamente. Así, la anterior necesidad myd a recodificar con:
myd
v1 v2 v3 v4 v5
1 0 1 <NA> <NA> 1
2 0 0 -1 -1 1
3 1 -1 0 0 0
4 <NA> <NA> <NA> 0 <NA>
5 1 <NA> 1 < NA> 0
6 -1 <NA> -1 -1 -1
7 1 -1 1 0 0
8 <NA> -1 <NA> 0 0
9 1 <NA> 0 <NA> -1
10 1 -1 -1 1 -1
Si desea un 'data.frame' return ed use 'do.call (data.frame, lapply (myd, function (.x) {- (as.numeric (.x) -2)}))' o 'as.data.frame (lapply (myd, function) (.x) {- (as.numeric (.x) -2)})) ' – mnel