我有多个文件。我想提取文件名的一部分,并将其作为矢量添加到数据帧中,然后将所有文件合并到一个数据帧中。
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变量的dataframe
发布于 2021-04-15 22:24:57
回答我自己的问题。我意识到了一个新手的错误:它不是管道函数的一部分!
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)发布于 2021-04-15 22:32:47
你走在正确的道路上,你应该这样做:
dfa = lapply(xlist, function(x){
read_excel(x)%>%
mutate(id= str_remove(x, "Data/"))
})
vo2= do.call("rbind.data.frame", dfa)实际上,你似乎在使用tidyverse:
您可以考虑使用map
发布于 2021-04-15 21:56:56
您可以像下面这样尝试gsub
> gsub("Data/|\\.xlsx", "", xlist)
[1] "1192-00" "343-00"https://stackoverflow.com/questions/67109775
复制相似问题