从文件名中删除多个字符串并将结果添加到 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
我有多个文件。我想提取部分文件名并将其作为向量添加到数据框中,然后将所有文件合并到一个数据框中。
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