2016-04-18 15 views
0

Ich möchte die Werte von bestimmten Spalten erwerben. Die Spalten sind für jede Zeile unterschiedlich und hängen von den Werten einer anderen Spalte ab. Das folgende Beispiel sollte für sich selbst sprechen.Wie wählt man Spalten nach Werten in einer Spalte aus?

Hier ist, was ich habe:

id year data.2014 data.2015 
1 2014 21   22 
2 2015 23   24 

was hier ich haben mag:

im Voraus
id year data.2014 data.2015 data 
1 2014 21   22   21 
2 2015 23   24   24 

Vielen Dank!

Antwort

5

du data.-df$year indem einfach vektorisiert konnte und es in den Spaltennamen passende

indx <- match(paste0("data.", df$year), names(df)) 
df$data <- df[cbind(1:nrow(df), indx)] 
df 
# id year data.2014 data.2015 data 
# 1 1 2014  21  22 21 
# 2 2 2015  23  24 24 

Eine andere Möglichkeit besteht darin, lange Daten zu bearbeiten und dann mit den ursprünglichen Daten durch id

library(data.table) 
indx <- melt(setDT(df), id = 1:2)[variable == paste0("data.", year), .(id, value)] 
df[indx, data := i.value, on = "id"] 
df 
# id year data.2014 data.2015 data 
# 1: 1 2014  21  22 21 
# 2: 2 2015  23  24 24 
zu verbinden
1

Wenn Ihre Jahre Spalten auf diese Weise sortiert sind, können Sie so etwas wie:

data <- data.frame(id=1:2, year=2014:2015, data.2014=c(21,23), data.2015=c(22,24)) 

tmp <- c() 
for (i in 1:nrow(data)){ 
    tmp <- c(tmp, data[i, 3+data$year[i]-2014]) 
} 
data$test <- tmp 
data 
Verwandte Themen