2015-11-08 90 views
0

我有一個命名的向量列表y。列表的名稱對應於變量x的值。我需要返回y中與x位置值相匹配的向量值。例如,如果在索引25處的x ==「b」,我希望返回列表y中包含的「b」向量的第25個值。條件矢量化匹配到指定的向量列表

這是我目前的解決方案:

x <- sample(letters[1:4], 100, replace = T) 

y <- list("a"=rnorm(100), "b"=rnorm(100), "c"=rnorm(100)) 

i <- match(x, names(y)) 
m <- sapply(i, function(i) {out <- rep(0,3); out[i] <- 1; out}) 

final <- apply(t(m) * do.call(cbind, y), 1, sum) 

我希望的東西更地道。作爲解決方案的一部分,答案處理x中的值不出現在y的名稱中的情況。

我試圖解決的真實世界用例是,我有幾個分段模型預測應用於整個人口,我需要分配給他們適當的部分。

編輯 另外,試圖避免笨重的使用ifelse。由於名字是已知的,我不應該手動指定它們。

+3

也許是這樣的'最後< - sapply(seq_along(X),功能(I)Y [[X [I] ] [I])'。基本上循環「x」並獲取相應的值。你可以用'as.numeric(as.character(final))'把它變成一個矢量。 'NULL'將被'NA'取代。 – NicE

+1

do.call(cbind,y)[cbind(1:100,i)] – Khashaa

+1

@Khashaa,你只是想起了我。將其添加爲答案,我將選擇它。 – Zelazny7

回答

1

使用矩陣子集與2維指數,你可以簡單地做

do.call(cbind, y)[cbind(1:length(i), i)]