通过组合R中先前列表的元素来创建新列表

时间:2013-05-20 02:56:53

标签: r

我有一个这样的列表:

    v = list(a1= 1, a2 = 2, b1 = 3, b2= 4, b3 = 5)

我渴望的结果是创建一个这样的列表:

   v = list(a = c(1, 2), b = c(3, 4, 5))

但是应该提到vector v是我的exapmle,我可以编写上面示例的代码,但我的问题是,如果每次aibi的长度是不同的,怎么能写一个函数来获得我的欲望结果?

2 个答案:

答案 0 :(得分:2)

我确信有一种更聪明的方法,但这是一种使用正则表达式的方法:

starters <- letters[1:2]
v2 <- lapply(starters,  function(x) {
    unname(unlist(v[grepl(x, names(v))]))
})

names(v2) <- starters

## $a
## [1] 1 2
## 
## $b
## [1] 3 4 5

答案 1 :(得分:2)

split(unlist(v), sub("\\d+$", "", names(v)))
# $a
# a1 a2 
#  1  2 
# 
# $b
# b1 b2 b3 
#  3  4  5