R 我有一个数据帧列表,我想用它自己的名字分别命名

R 我有一个数据帧列表,我想用它自己的名字分别命名,r,list,dataframe,R,List,Dataframe,我能够从文件夹中提取文件并有一个列表 #Set work directory directory<-paste0("C://Program//User//Me//") filestoread <- list.files(directory, pattern = "^LName_WWWF.*\\.xlsx$", full.names = TRUE) filelist = lapply(filestoread, function(x){as.

我能够从文件夹中提取文件并有一个列表

#Set work directory
directory<-paste0("C://Program//User//Me//")

filestoread <- list.files(directory, pattern = "^LName_WWWF.*\\.xlsx$", full.names = TRUE)


filelist = lapply(filestoread, function(x){as.data.frame(read_excel(x,sheet = 
                                                          "Sheet1"))})
我想更改它们,以便names(filelist)函数将文件重命名为

"WWWF2016", "WWWF2017" , "WWWF2018", 
"WWWF2019","WWWF2020"

我在想一些简单的事情,比如删除第一个下划线之前的所有内容,然后保留连接左4和右4。如果您有更好的想法,也可以。

使用
sub
,我们可以将子字符串捕获为一个块,并在
replacement
中指定捕获组的反向引用

names(filelist) <- sub("^[^_]+_([A-Z]+)R[a-z]+(\\d+)_.*",
       "\\1\\2", basename(filenm))

names(filelist)
#[1] "WWWF2016" "WWWF2017" "WWWF2018" "WWWF2019" "WWWF2020"
替换

`\\1`-  backreference for first captured group
`\\2` - backreference for second captured group
数据
filenm使用
sub
,我们可以将子字符串捕获为块,并在
replacement

names(filelist) <- sub("^[^_]+_([A-Z]+)R[a-z]+(\\d+)_.*",
       "\\1\\2", basename(filenm))

names(filelist)
#[1] "WWWF2016" "WWWF2017" "WWWF2018" "WWWF2019" "WWWF2020"
替换

`\\1`-  backreference for first captured group
`\\2` - backreference for second captured group
数据
filenm希望下面的代码对您有用(感谢@akrun的数据)


希望下面的代码对您有用(感谢@akrun的数据)


你知道为什么在整个文件路径中读取我的文件吗?我的结果以C://Program//User//Me//LName\u wwfrecvd2017\u日期20200204结束。我是否切断了字符串名称目录?@user35131我以为你已经切断了路径。您可以使用
basename(filenm)
。第一次尝试更新的代码,看看它是如何完成的。非常感谢。一切都很顺利。非常感谢你!你知道为什么在整个文件路径中读取我的文件吗?我的结果以C://Program//User//Me//LName\u wwfrecvd2017\u日期20200204结束。我是否切断了字符串名称目录?@user35131我以为你已经切断了路径。您可以使用
basename(filenm)
。第一次尝试更新的代码,看看它是如何完成的。非常感谢。一切都很顺利。非常感谢你!
filenm <- c("LName_WWWFRecvd2016_dated_20200204",    
     "LName_WWWFRecvd2017_dated_20200204", 
    "LName_WWWFRecvd2018_dated_20200204",       
    "LName_WWWFRecvd2019_dated_20200204", 
    "LName_WWWFRecvd2020_dated_20200204")
> sub(".*_(\\w{4})\\w+(\\d{4})_.*", "\\1\\2", filenm)
[1] "WWWF2016" "WWWF2017" "WWWF2018" "WWWF2019" "WWWF2020"