Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件名中删除多个字符串,并将结果添加到r中apply函数的dataframe中_R_Filenames_Lapply_Stringr - Fatal编程技术网

从文件名中删除多个字符串,并将结果添加到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)