【问题标题】:name character vectors with same name of list名称与列表名称相同的字符向量
【发布时间】:2019-03-02 12:06:29
【问题描述】:

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

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"

【问题讨论】:

    标签: r dataframe vector named


    【解决方案1】:

    我们unlist list 同时通过replicating 设置名称

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

    stack 到一个两列data.frame,提取'values'列并用'ind'命名

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

    【讨论】:

    • 第一个效果很好,谢谢! (也不知道lenghts的存在)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多