我有一个类似这样的列表:
v = list(a1= 1, a2 = 2, b1 = 3, b2= 4, b3 = 5)
我想要的结果是创建一个类似这样的列表:
v = list(a = c(1, 2), b = c(3, 4, 5))
但是应该提到vectorv
是我的例子,我可以为上面的例子编写代码,但我的问题是如果每次ai
和的长度bi
不同,如何在R中编写一个函数来获得我想要的结果?
我有一个类似这样的列表:
v = list(a1= 1, a2 = 2, b1 = 3, b2= 4, b3 = 5)
我想要的结果是创建一个类似这样的列表:
v = list(a = c(1, 2), b = c(3, 4, 5))
但是应该提到vectorv
是我的例子,我可以为上面的例子编写代码,但我的问题是如果每次ai
和的长度bi
不同,如何在R中编写一个函数来获得我想要的结果?
我确信有一种更聪明的方法,但这是使用正则表达式的一种方法:
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
split(unlist(v), sub("\\d+$", "", names(v)))
# $a
# a1 a2
# 1 2
#
# $b
# b1 b2 b3
# 3 4 5