2016-04-18 16 views
0

特定の列から値を取得したいと考えています。列は各行ごとに異なり、別の列の値に依存します。以下の例は、それ自体について話すべきです。列内の値に応じて列を選択する方法は?

は、ここで私が持っているものです。

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

は、ここで私が持っているしたいものです。

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

は、事前にありがとうございます!

答えて

5

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 

もう1つの選択肢は、長い形式のデータを処理して元のデータに戻すことです。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 
1

あなたの年の列がこのようにソートされている場合は、あなたのような何かを行うことができます:あなたはdf$yeardata.を追加し、列名でそれを照合することによって、これをベクトル化することができ

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 
関連する問題