楼主: huapeng66
658 1

[问答] 请问如何在批量导入excel数据时增加变量? [推广有奖]

  • 6关注
  • 0粉丝

博士生

47%

还不是VIP/贵宾

-

威望
0
论坛币
5217 个
通用积分
7.0196
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
19496 点
帖子
133
精华
0
在线时间
320 小时
注册时间
2018-9-16
最后登录
2023-3-21

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想在数据导入时增加两个字段(类型、批次),附件newdata.xlsx所示。其中测试数据在testdata.zip中。请问如何操作?
序号企业名称《目录》序号商标产品型号产品名称备注类型批次

1

东风汽车公司3东风牌EQ5045XXYTBEV22纯电动厢式运输车新发布车型2018年第01批

2

东风汽车公司3东风牌EQ5045XXYTBEV23纯电动厢式运输车新发布车型2018年第01批

3

东风汽车公司3东风牌EQ5045XXYTBEV25纯电动厢式运输车新发布车型2018年第01批

4

东风汽车公司3东风牌EQ5080XXYTFCEV4燃料电池厢式运输车新发布车型2018年第01批


  1. library(openxlsx)
  2. library(tidyverse)
  3. library(stringr)
  4. library(plyr)

  5. # -------------------------------------------------------------------------
  6. #读取一个workbook的多个sheets
  7. xlsxfile <- "/testdata/"  # 文件路径
  8. readsheets <- function(file) {
  9.   sheetsnames <- getSheetNames(file)
  10.   ldply(sheetsnames, .fun = function(x) read.xlsx(xlsxFile = file, sheet = x, startRow = 2))
  11. }

  12. #读取一个文件夹下的多个workbooks中的多个sheets
  13. readwks <- function(file) {
  14.   filenames <- list.files(path = file, pattern = "*.xlsx", full.names = TRUE)
  15.   ldply(filenames, .fun = readsheets)
  16. }

  17. newdata <- readwks(xlsxfile)
复制代码



testdata.zip (35.24 KB)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:excel数据 EXCEL 批量导入 exce xcel

testdata.zip

56.93 KB

newdata.xlsx

31.08 KB

沙发
huapeng66 学生认证  发表于 2021-6-8 13:47:15 |只看作者 |坛友微信交流群
我按如下方法测试有效,看看大家还能不能再优化一下。很想把循环去掉。
  1. library(openxlsx)
  2. library(tidyverse)
  3. library(stringr)
  4. library(plyr)
  5. # -------------------------------------------------------------------------
  6. #读取一个文件夹下的多个workbooks中的多个sheets
  7. readwks <- function(path) {
  8.   paths <- list.files(path = path, pattern = "*.xlsx$",full.names = T,recursive = T,ignore.case = T)
  9.   filenames <- dir(path)
  10.   batch <- str_extract(filenames,"(?<=().+?(?=))")
  11.   iorder <- 1
  12.   data.list <- list()
  13.   for (i in 1:length(paths)){
  14.     sheetsnames <- getSheetNames(paths[i])
  15.     for (j in 1:length(sheetsnames)){
  16.     tempdata <- read.xlsx(paths[i],sheet = sheetsnames[j], startRow = 2)
  17.     tempdata$类型 <- sheetsnames[j]
  18.     tempdata$批次 <- batch[i]
  19.     data.list[[iorder]] <- tempdata  
  20.     iorder <- iorder + 1
  21.     }
  22.   }
  23.   data <- do.call(rbind.fill,data.list)
  24.   return(data)
  25. }
复制代码


使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 01:15