从文件名中删除多个字符串,并将结果添加到r中apply函数的dataframe中
我有多个文件。我想提取部分文件名,并将其作为向量添加到数据帧中,然后将所有文件合并到单个数据帧中从文件名中删除多个字符串,并将结果添加到r中apply函数的dataframe中,r,filenames,lapply,stringr,R,Filenames,Lapply,Stringr,我有多个文件。我想提取部分文件名,并将其作为向量添加到数据帧中,然后将所有文件合并到单个数据帧中 library(readxl) library(dplyr) library(stringr) fpath <- "Data/" xlist = list.files(path = fpath, pattern = "\\.xlsx", full.names = TRUE) xlist "Data/1192-00.xlsx" &qu
library(readxl)
library(dplyr)
library(stringr)
fpath <- "Data/"
xlist = list.files(path = fpath, pattern = "\\.xlsx", full.names = TRUE)
xlist
"Data/1192-00.xlsx" "Data/343-00.xlsx"
然而,当我尝试将文件名添加为“ID”向量时,我得到了一个错误
dfa = lapply(xlist, function(x){
vo2 = read_excel(x)
id= str_remove(x, "Data/")
vo2= mutate(ID = id)
})
vo2= do.call("rbind.data.frame", dfa)
我也试过了
dfa = lapply(xlist, function(x){
vo2 = read_excel(x)
vo2$id= gsub("Data/|\\.xlsx", "", x) #removes both "Data/" and ".xlsx"
})
vo2= do.call("rbind.data.frame", dfa)
但是结果是只使用id变量的dataframe您可以像下面那样尝试
gsub
> gsub("Data/|\\.xlsx", "", xlist)
[1] "1192-00" "343-00"
回答我自己的问题。
我意识到了mutate的一个新错误:它不是管道函数的一部分
dfa = lapply(xlist, function(x){
vo2 = read_excel(x)
id= gsub("Data/|\\.xlsx", "", x)
vo2= vo2%>%
mutate(ID= id)
})
vo2= do.call("rbind.data.frame", dfa)
如果您在正确的路径上,您应该执行以下操作:
dfa = lapply(xlist, function(x){
read_excel(x)%>%
mutate(id= str_remove(x, "Data/"))
})
vo2= do.call("rbind.data.frame", dfa)
实际上,您似乎正在使用tidyverse:
你可以考虑使用<代码> map < /> >/p>谢谢。这可以删除不需要的字符串,但是我仍然得到了与
mutate
函数相同的错误。@MarkDavies我认为您不应该在这里使用mutate
。为什么不使用mutate
,您还有其他选择吗?我以前在这种组合函数中使用过mutate。我使用vo2$id
语法为问题添加了另一次失败的尝试。Thanks@MarkDavies您似乎已经找到了使用mutate
:)的解决方法,谢谢。我切换到使用gsub
而不是str_remove
,因为我还想删除“.xlsx”。使用stringr
函数是否可以做到这一点?是的,只需执行stru-remove(basename(x),“.xlsx”)
或者甚至使用stru-replace(x,“Data/\\.xlsx”)
是的,我喜欢使用tidyverse解决方案。它们对我来说通常是有意义的,而且通常是直截了当的。我没有遇到map
dfa = lapply(xlist, function(x){
vo2 = read_excel(x)
id= gsub("Data/|\\.xlsx", "", x)
vo2= vo2%>%
mutate(ID= id)
})
vo2= do.call("rbind.data.frame", dfa)
dfa = lapply(xlist, function(x){
read_excel(x)%>%
mutate(id= str_remove(x, "Data/"))
})
vo2= do.call("rbind.data.frame", dfa)