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
。由于名字是已知的,我不应该手动指定它们。
也许是这样的'最后< - sapply(seq_along(X),功能(I)Y [[X [I] ] [I])'。基本上循环“x”并获取相应的值。你可以用'as.numeric(as.character(final))'把它变成一个矢量。 'NULL'将被'NA'取代。 – NicE
do.call(cbind,y)[cbind(1:100,i)] – Khashaa
@Khashaa,你只是想起了我。将其添加为答案,我将选择它。 – Zelazny7