2016-08-22 5 views
1

Ich suchte nach einer Weile, um zu versuchen, dies zu lösen, aber leider konnte keine Antwort finden.Kopieren Zelle in einer Zeile, wenn es Spalte entspricht

In meinem Datenfeld enthält die letzte Spalte Zeichenfolgen, die Spaltennamen entsprechen. Ich möchte eine andere Spalte erstellen, die für jede Zeile den Wert zurückgibt (kopiert), der diesem Spaltennamen entspricht.

Zum Beispiel, sagen meine Daten:

col1 <- c(1, 4, 6, 0, 5) 
col2 <- c(4, 6, 7, 8, 6) 
col3 <- c(0, 4, 2, 2, 1) 
col4 <- c("col1", "col1", "col2", "col3", "col1") 
df <- data.frame(col1, col2, col3, col4) 

und was ich will, ist, COL5 erreichen die Kopien relevanten Zellen aus jeder Zeile:

col1 col2 col3 col4 col5 
1  4  0  col1 1 
4  6  4  col1 4 
6  7  2  col2 7 
0  8  2  col3 2 
5  6  1  col1 5 

Im Grunde ist es bei col4 aussieht und gibt die Wert aus derselben Zeile, die mit diesem Spaltennamen übereinstimmt.

Dies ist offensichtlich eine sehr vereinfachte Version meiner Daten, weshalb ich es automatisieren möchte. Ich würde wirklich jede Hilfe zu schätzen :)

Antwort

0

Wir können row/col Indizierung verwenden, um die Elemente aus dem Dataset zu extrahieren, um die "Col5" zu erstellen.

df$col5 <- df[-4][cbind(1:nrow(df), match(as.character(df$col4), colnames(df)))] 
df$col5 
#[1] 1 4 7 2 5 
+1

Es hat funktioniert !!! Vielen Dank! Ich schätze deine Hilfe sehr! Wird als Antwort in ein paar Minuten akzeptieren, wenn ich darf :) – Nat

Verwandte Themen