列出具有条件逻辑

时间:2017-11-03 16:05:51

标签: r list vector data-manipulation list-manipulation

我有一个列表,例如,

lst <- list(1, c(3, 4, 6), c(2, 5))

此列表中的每个第一个元素都具有最重要的意义。您可以考虑列表中的数字位置。例如,存在1到6个位置,其中位置1不与任何其他位置组合。位置4和6与位置3组合,位置5与位置2组合。现在我需要创建一个矢量,

W1 W2 W3 W4 W5 W6
W1 W2 W3 W3 W2 W3

这是一个命名向量。名称是位置的名称,值是它们组合的位置。这似乎很容易,但我花了很多时间。提前谢谢。

2 个答案:

答案 0 :(得分:1)

res <- character(length(unlist(lst)))
names(res) <- paste0("W", seq_along(unlist(lst)))
lapply(lst, function(x) res[x] <<- paste0("W", x[1]))
res
#   W1   W2   W3   W4   W5   W6 
# "W1" "W2" "W3" "W3" "W2" "W3" 

修改

或者这可能是for循环更好(并避免<<-)的情况之一:

res <- character(length(unlist(lst)))
names(res) <- paste0("W", seq_along(unlist(lst)))
for (x in lst) res[x] <- paste0("W", x[1])
res
#   W1   W2   W3   W4   W5   W6 
# "W1" "W2" "W3" "W3" "W2" "W3"

答案 1 :(得分:0)

另一种选择。如果可能,请检查并提供时间安排。它可能对其他人有帮助。

t<-list()
for(t1 in lst){t[paste0("w",t1)]<-paste0("w",t1[1])}
output<-unlist(t, recursive = TRUE, use.names = TRUE)