2010-02-28 7 views
5

Kombination 2 Spalten in 1 Spalte oft in einer sehr großen Datenmenge in R seine Kombination schnell, wenn ich sie zur Arbeit bringen kann und der wahre Datensatz ist ~ 1500 X 45000, also müssen sie schnell sein. Ich habe definitiv einen Verlust für 1) an dieser Stelle, obwohl einige Code für 2) und 3) haben.2 Spalten in 1 Spalte oft in einer sehr großen Datenmenge in R

ist hier ein Spielzeug Beispiel der Datenstruktur:

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)) 

So gibt es ein paar Spalten von grundlegenden demographischen Informationen und dann der Rest der Spalten sind Biallel SNP Info. Beispiel: rs123 ist Allel 1 von rs123 und rs123.1 ist das zweite Allel von rs123.

1) muss ich alle biallelischen SNP-Daten fusionieren, die derzeit in 2 Spalten in 1 Spalte ist, so zum Beispiel: rs123 rs123.1 und in eine Spalte (aber innerhalb des Datensatzes):

11 
31 
11 
31 
31 
11 
11 
11 
31 
11 

2) Ich muss den seltensten SNP-Wert identifizieren (im obigen Beispiel ist es 31).

3) Ich brauche den seltensten SNP-Wert mit 1 und die andere (n) mit 0

Antwort

8

ersetzen Sie meinen ‚merge‘ oder ‚neu ordnen‘ oder einfach verketten? Falls Letzteres ist dann

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 

und jetzt können Sie zählt tun und so weiter auf 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

Paste! Na sicher! Ich meinte verketten. Vielen Dank für die Hilfe. Jetzt arbeite ich daran, dass es über 45.000 Spalten funktioniert. Danke noch einmal! –

+0

Sie können mit 'grep()' und 'match()' arbeiten, um Spaltenindizes zu erhalten. Fühlen Sie sich auch frei, diese Antwort aufzufrischen und/oder zu akzeptieren, wenn sie Ihnen als die richtige erscheint :-) –

+1

akzeptiert! :) Ich habe noch nicht genug Reputationspunkte, um noch zu upvoten ...! –

Verwandte Themen