簡體   English   中英

條件向量化到向量命名列表的匹配

[英]conditional vectorized matching to named list of vectors

我有一個向量的命名列表,y。 列表的名稱對應於變量x的值。 我需要返回y中與位置i處的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的笨拙用法。 由於名稱是已知的,因此我不必手動指定它們。

使用帶有二維索引的矩陣子集,您可以簡單地執行

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM