r - 如何使for循环命令rbind同一目录中的所有excel文件
问题描述
我想 rbind 目录中的所有 excel 文件(无论文件总数)并创建一个新列,其中填充了文件名,这样我就可以确定数据的来源。例如,我有这样的文件模板
promo stock
a 200
b 200
c 200
变成这样
store promo stock
file1 a 200
file1 b 200
file1 c 200
file2 a 200
file2 b 200
file2 c 200
file3 a 200
file3 b 200
file3 c 200
如何为这种情况下一个for循环命令?提前谢谢
解决方案
我们可以找到文件的完整路径名,然后用它lapply
来读取每个文件readxl::read_excel
并添加一个store
带有文件名的新列
file_paths <- list.files("/path/to/files", pattern = ".xlsx$", full.names = TRUE)
do.call(rbind, lapply(file_paths, function(x)
transform(readxl::read_excel(x), store = sub(".xlsx$", "", basename(x)))))
# promo stock store
#1 a 200 file1
#2 b 200 file1
#3 c 200 file1
#4 a 200 file2
#5 b 200 file2
#6 c 200 file2
我们也可以使用purrr::map_df
purrr::map_df(file_paths, ~transform(readxl::read_excel(.),
store = sub(".xlsx$", "", basename(.))))
推荐阅读
- html - 应用的 CSS 导致锚点无法点击
- vue.js - Vue:事件总线处理程序未定义
- javascript - 嵌套折线图未显示
- oauth-2.0 - 在 OpenID 流中提交令牌请求时如何修复“无效签名”API 错误?
- c# - 如何将结构数组从 c++ 传递到 c#?
- javascript - React hooks - setState 没有更新状态属性以显示侧边栏
- javascript - 我不知道为什么我不断收到此错误
- c++ - 我可以从样式表 (qss) 更改自定义动态属性吗?
- android - 我在哪里可以找到用于对象地标检测的 Tensorflow lite 项目(例如面部地标)?
- binary - 求十进制整数 -102 的 8 位 2 的补码