2013-05-20 18 views
1

結合前面的列表的元素創建一個新的列表我有一個列表是這樣的:由R中

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

我的願望的結果是創建一個列表是這樣的:

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

但應該提到的是,矢量v是我的exapmle,我可以寫上面的例子的代碼,但我的問題是,如果每個時間長度aibi是不同的,如何寫一個函數來獲得我的願望結果在R?

回答

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

我不需要名字A1,A2,B1,B2,B3。我如何從結果中刪除這些名稱?我只需要$ a和$ b。 – rose

+0

我發現如何刪除這些名稱:split(unlist(v,use.names = FALSE),sub(「\\ d + $」,「」,names(v)))。謝謝。 – rose

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