2015-11-08 58 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)]