与列表名称相同的字符向量

时间:2019-03-02 12:06:30

标签: r dataframe vector named

我有一个看起来像这样的列表。

my_list <- list(Y = c("p", "q"), K = c("s", "t", "u"))

我想用它们所在的列表的名称来命名每个列表元素(字符向量)。同一向量的所有元素都必须具有相同的名称

我能够编写在单个列表元素上使用的功能

name_vector <- function(x){
      names(x[[1]]) <- rep(names(x[1]), length(x[[1]]))
      return(x)
    }

> name_vector(my_list[1])
$Y
  Y   Y 
"p" "q" 

但是找不到向量化方法。如果我使用apply函数运行它,则返回的列表不变

> lapply(my_list, name_vector)
$K
[1] "p" "q"

$J
[1] "x" "y"

我想要的my_list输出是一个命名向量

 Y   Y   K   K   K  
"p" "q" "s" "t" "u"

2 个答案:

答案 0 :(得分:8)

我们unlist list通过rep关联设置名称时

setNames(unlist(my_list), rep(names(my_list), lengths(my_list)))

或将stack放入两列data.frame中,提取“值”列,并以“ ind”命名

with(stack(my_list), setNames(values, ind))

答案 1 :(得分:4)

如果您的名字不以数字结尾:

vec <- unlist(my_list)
names(vec) <- sub("\\d+$","",names(vec))
vec                
#   Y   Y   K   K   K 
# "p" "q" "s" "t" "u"