从文件名中删除多个字符串并将结果添加到 r 中应用函数中的数据框

Remove multiple strings from filename and add result to dataframe in apply function in r

我有多个文件。我想提取部分文件名并将其作为向量添加到数据框中,然后将所有文件合并到一个数据框中。

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" 

我可以使用以下代码合并文件

dfa = lapply(xlist, function(x){
  vo2 = read_excel(x)
})
vo2= do.call("rbind.data.frame", dfa)

但是,当我尝试将文件名添加为“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)
 Error in UseMethod("mutate") : 
  no applicable method for 'mutate' applied to an object of class "character" 

我也试过了

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 变量的数据帧

您可以像下面那样尝试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