代码之家  ›  专栏  ›  技术社区  ›  John Huang

基于部分列表元素名称分配属性表名称的有效方法

  •  1
  • John Huang  · 技术社区  · 3 年前

    我有一个列表,其中路径名作为列表中的元素名 l1 .

    # File List
    l1 <- list(2,3,4,5)
    names(l1) <- c("C:/Users/2013_mean.csv",
                   "C:/Users/2013_median.csv",
                   "C:/Users/2015_mean.csv",
                   "C:/Users/2015_median.csv")
    
    
    

    我想为列表分配一个属性表,该表以更高效的方式类似于以下内容。我只想从中的元素中提取路径名的一部分 l1 将它们分配到各自的组件中。例如: 我想从“C:/Users/2013_mean.csv”中“抓取”这个名字“2013_mean” l1 并将其分配给属性表中的该元素。有没有更有效的方法?

    attributes(l1) <- data.frame(id = c("2013_mean", "2013_median", "2015_mean", "2015_median")
                                 )
    
    attributes(l1)
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   akrun    3 年前

    我们可以使用 basename names 关于 list 提取子串

    attributes(l1) <- data.frame(id = sub("\\.csv", "", basename(names(l1))))
    

    -输出

    > l1
    [[1]]
    [1] 2
    
    [[2]]
    [1] 3
    
    [[3]]
    [1] 4
    
    [[4]]
    [1] 5
    
    attr(,"id")
    [1] "2013_mean"   "2013_median" "2015_mean"   "2015_median"
    

    或者另一个选择是 基名 + file_path_sans_ext

    tools::file_path_sans_ext(basename(names(l1)))
    [1] "2013_mean"   "2013_median" "2015_mean"   "2015_median"