根据部分列表元素名称分配属性 table 名称的有效方法

Efficient way of assigning attribute table names based on a partial list element name

我有一个列表,其中路径名作为列表 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")


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

attributes(l1) <- data.frame(id = c("2013_mean", "2013_median", "2015_mean", "2015_median")
                             )

attributes(l1)

我们可以在listnames上使用basename来提取子串

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"

或者另一种选择是 basename + file_path_sans_ext

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