首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从filename中删除多个字符串,并将结果添加到r中应用函数的dataframe中

从filename中删除多个字符串,并将结果添加到r中应用函数的dataframe中
EN

Stack Overflow用户
提问于 2021-04-15 21:51:10
回答 3查看 34关注 0票数 0

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

代码语言:javascript
复制
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" 

我可以将这些文件与以下代码结合起来

代码语言:javascript
复制
dfa = lapply(xlist, function(x){
  vo2 = read_excel(x)
})
vo2= do.call("rbind.data.frame", dfa)

但是,当我尝试将文件名添加为"ID“向量时,我得到一个错误

代码语言:javascript
复制
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)
代码语言:javascript
复制
 Error in UseMethod("mutate") : 
  no applicable method for 'mutate' applied to an object of class "character" 

我也试过

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-15 22:24:57

回答我自己的问题。我意识到了一个新手的错误:它不是管道函数的一部分!

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-04-15 22:32:47

你走在正确的道路上,你应该这样做:

代码语言:javascript
复制
dfa = lapply(xlist, function(x){
   read_excel(x)%>%
   mutate(id= str_remove(x, "Data/"))
})
vo2= do.call("rbind.data.frame", dfa)

实际上,你似乎在使用tidyverse:

您可以考虑使用map

票数 1
EN

Stack Overflow用户

发布于 2021-04-15 21:56:56

您可以像下面这样尝试gsub

代码语言:javascript
复制
> gsub("Data/|\\.xlsx", "", xlist)
[1] "1192-00" "343-00"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67109775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档