首页 > 解决方案 > 为R中的每个元素列表添加前缀

问题描述

我有许多使用 lapply & vroom 包读取的 csv 文件(它有 18 个文件,每个文件中有数百万行)

library(vroom)
filelist <- list.files(pattern = "*.csv")

输入(文件列表)

c("UPW_119_1.csv", "UPW_119_2.csv", "UPW_119_3.csv")

files <- lapply(filelist, FUN=vroom)

假设下面是我的列表的样子:

files <- list(no1= c("1","2","3","4","5"), no2= c(1:3),no3 = c("190301010141","190301010141","190301010143","19030101014","190301010145"))

我想为列表中的每个元素添加“91”前缀,后跟它们在文件列表中的文件名

我尝试过这样的事情,但它不正确

mytry :
files2 <- paste0("91", files, fileslist[i]) #Adding file name

所需输出

## List of 3
##  $ f1  : int [1:5] 911_UPW_119_1 912_UPW_119_1 913_UPW_119_1 914_UPW_119_1 915_UPW_119_1
##  $ no2: int [1:3] 911_UPW_119_2 912_UPW_119_2 913_UPW_119_2 
##  $ no3: int [1:5] "9190301010141_UPW_119_3","91190301010141_UPW_119_3","91190301010143_UPW_119_3","9119030101014_UPW_119_3","91190301010145_UPW_119_3")

然后我想写这些 csv 文件

所以总的来说,读取 18 个 csv 文件,按照上面的方式进行修改,添加“91”(静态)和文件名(动态)然后写入 18 个 csv 文件

我研究了很多,尝试了 lapply 和 list 功能等,但没有帮助!

标签: rlistdata.tabletidyverse

解决方案


您可以使用 lapply:

filelist <- c("UPW_119_1.csv", "UPW_119_2.csv", "UPW_119_3.csv")
files <- list(no1= c("1","2","3","4","5"), no2= c(1:3),no3 = c("190301010141","190301010141","190301010143","19030101014","190301010145"))

lapply(1:length(files), function(k) paste(91, files[[k]], sub(".csv", "", filelist[[k]], fixed = TRUE), sep = "_"))

它是矢量化的,lapply因此非常有效


推荐阅读