2016-12-21 7 views
0

Mein Datenrahmen ist:R - eine Spalte von Werten anderer Datenrahmen mit Bedingungen hinzufügen

dataMDS <- data.frame(FID=c(1,1), IID=c("CD03577","50016"), SOL=c(0,0), C1=c(0.00332472,-0.00154285)) 
> dataMDS 
    FID  IID SOL   C1 
1 1 CD03577 0 0.00332472 
2 1 50016 0 -0.00154285 

Ich mag eine neue Spalte plates mit Werten von 2 anderen Datenrahmen hinzuzufügen:

platesRAC <- data.frame(V1=c(1,1), V2=c("CD03577","CD0371"), V3=c("2011-01-12_RAC1","2011-01-27_RAC5")) 
> platesRAC 
    V1  V2     V3 
1 1 CD03577  2011-01-12_RAC1 
2 1 CD0371  2011-01-27_RAC5 

platesDESIR <- data.frame(V1=c(1,1,1), V2=c("50015","50016","50017"), V3=c("2011-11-23_DESIR9","2011-11-23_DESIR9","2011-11-23_DESIR8")) 
> platesDESIR 
    V1 V2     V3 
1 1 50015 2011-11-23_DESIR9 
2 1 50016 2011-11-23_DESIR9 
3 1 50017 2011-11-23_DESIR8 

I möchte den Wert in V3 von platesRAC OR platesDESIR wenn V2 == IID erhalten und diesen Wert in einer neuen Spalte plates in dataMDS hinzufügen.

Ich habe versucht, mit merge:

new <- merge(x = dataMDS, y = platesRAC, by.x = "IID", by.y = 'V2', all = TRUE) 

    FID  IID SOL   C1 V1    V3 
1 1 CD03577 0 0.00332472 1 2011-01-12_RAC1 
2 1 50016 0 -0.00154285 NA    <NA> 

Und natürlich habe ich Werte NA weil IID 50016 in platesDESIR und nicht in platesRAC ist. Ich weiß nicht, wie man ein OR macht keine NA-Werte haben.

Auch ich will nicht die V1 Spalte nach dem Zusammenführen, sondern nur die V3 Spalte in plates

Die Ergebnisse umbenennen möchte ich haben mag:

FID  IID SOL   C1    plates 
1 1 CD03577 0 0.00332472  2011-01-12_RAC1 
2 1 50016 0 -0.00154285 2011-11-23_DESIR9 

Vielen Dank für jede Hilfe

+2

versuchen mit 'verschmelzenden y = rbind (platesRAC, platesDESIR)' – sirallen

+0

Sie bitte Ihre Beispiele reproduzierbar machen und erwartete Ausgabe hinzufügen. Dies erleichtert es anderen sehr, Ihnen zu helfen – Sotos

+0

Es funktioniert nicht mit 'rbind', weil meine Datenrahmen unterschiedliche Längen haben, also habe ich auch NA-Werte auf diese Weise. Ich habe Code hinzugefügt, um meine Datenframes und das Ergebnis zu reproduzieren, danke für den Rat. – Elysire

Antwort

0

Es ist keine Zusammenführung, sondern eine Übereinstimmung nach verbundenen PlattenRAC und PlattenDESIR:

bindRACDESIR = rbind(platesRAC, platesDESIR) 
dataMDS$plates <- bindRACDESIR$V3[match(dataMDS$IID,bindRACDESIR$V2)] 

Und das Ergebnis ist:

FID  IID SOL   C1    plates 
1 1 CD03577 0 0.00332472  2011-01-12_RAC1 
2 1 50016 0 -0.00154285 2011-11-23_DESIR9 
Verwandte Themen