使用R从另一个列表创建列表

时间:2016-03-11 15:18:17

标签: r list

我有一个字母列表l

[1] a b c
[2] b c a b

和字母的矢量v

[1] a
[2] b

我的目标是逐个取向量v的字母并创建一个新列表,其中包含该字母后面出现的所有字母。 例如 我取v“a”的第一个字母,然后创建出现在“a”之后的字母列表,我得到了这个:

[1] b c
[2] b

我拿第二个字母或者v后面是“b” 我添加到列表中:

[3] c   
[4] c a b

所以最后的结果是:

[1] b c
[2] b
[3] c   
[4] c a b

我不知道该怎么做,看起来很复杂。

我还有一个这种格式的矢量列表

[[1]]
[1] a
[2] b 
[3] c
[[2]]
[1] e
[2] g

2 个答案:

答案 0 :(得分:3)

嵌套lapply

lapply(v, function(v, l) lapply(l, function(x, v) {
  if (!(v %in% x)) return(x) #the case of no match
  x[-seq_len(which.max(x == v))]
}, v = v), l = l)
#[[1]]
#[[1]][[1]]
#[1] "b" "c"
#
#[[1]][[2]]
#[1] "b"
#
#
#[[2]]
#[[2]][[1]]
#[1] "c"
#
#[[2]][[2]]
#[1] "c" "a" "b"

答案 1 :(得分:1)

这是使用lapply的一种方法。

dat <- list( c("a", "b", "c"), c("b", "c", "a", "b"))
v <- c("a", "b")

result <- list()
for (l in v) {
  result[[l]] <- lapply(dat, function(z) z[(which(z == l)[1] + 1):length(z)])
}
result