2010-02-28 17 views
5

Combinar 2 columnas en 1 columna muchas veces en un gran conjunto de datos en ICombinar 2 columnas en 1 columna muchas veces en un gran conjunto de datos en I

Las soluciones torpes que estoy trabajando no van a ser muy rápido si puedo hacer que funcionen y el verdadero conjunto de datos es ~ 1500 X 45000, así que necesitan ser rápidos. Definitivamente estoy perdido por 1) en este momento, aunque tengo un código para 2) y 3).

Aquí está un ejemplo de juguete de la estructura de datos:

pop = data.frame(status = rbinom(n, 1, .42), sex = rbinom(n, 1, .5), 
age = round(rnorm(n, mean=40, 10)), disType = rbinom(n, 1, .2), 
rs123=c(1,3,1,3,3,1,1,1,3,1), rs123.1=rep(1, n), rs157=c(2,4,2,2,2,4,4,4,2,2), 
rs157.1=c(4,4,4,2,4,4,4,4,2,2), rs132=c(4,4,4,4,4,4,4,4,2,2), 
rs132.1=c(4,4,4,4,4,4,4,4,4,4)) 

Por lo tanto, hay algunas columnas de información demográfica básica y luego el resto de las columnas son bialélicas SNP información. Ej .: rs123 es el alelo 1 de rs123 y rs123.1 es el segundo alelo de rs123.

1) Necesito fusionar todos los datos SNP bialélico que está actualmente en 2 columnas en 1 columna, así, por ejemplo: rs123 y rs123.1 en una columna (pero dentro del conjunto de datos):

11 
31 
11 
31 
31 
11 
11 
11 
31 
11 

2) Necesito identificar el valor de SNP menos frecuente (en el ejemplo anterior es 31).

3) Tengo que sustituir el valor menos frecuente SNP con 1 y el otro (s) con 0.

Respuesta

8

¿Se refiere a 'fusión' o 'reorganizar' o simplemente concatenar? Si es esto último entonces

R> pop2 <- data.frame(pop[,1:4], rs123=paste(pop[,5],pop[,6],sep=""), 
+        rs157=paste(pop[,7],pop[,8],sep=""), 
+        rs132=paste(pop[,9],pop[,10], sep="")) 
R> pop2 
    status sex age disType rs123 rs157 rs132 
1  0 0 42  0 11 24 44 
2  1 1 37  0 31 44 44 
3  1 0 38  0 11 24 44 
4  0 1 45  0 31 22 44 
5  1 1 25  0 31 24 44 
6  0 1 31  0 11 44 44 
7  1 0 43  0 11 44 44 
8  0 0 41  0 11 44 44 
9  1 1 57  0 31 22 24 
10  1 1 40  0 11 22 24 

y ahora se puede hacer el recuento y otras cosas en pop2:

R> sapply(pop2[,5:7], table) 
$rs123 

11 31 
6 4 

$rs157 

22 24 44 
3 3 4 

$rs132 

24 44 
2 8 

R> 
+0

pasta! ¡Por supuesto! Me refiero a concatenar. Muchísimas gracias por la ayuda. Ahora estoy trabajando para que funcione en 45,000 columnas. ¡Gracias de nuevo! –

+0

Puede trabajar con 'grep()' y 'match()' para obtener los índices de columnas. Además, siéntase libre de votar y/o aceptar esta respuesta si le parece correcta :-) –

+1

¡aceptada! :) ¡No tengo suficientes puntos de reputación para vitorear todavía ...! –

Cuestiones relacionadas