根据参考重命名/重新编码多个 excel 文件名

问题描述 投票:0回答:1

我有192个xlsx文件是根据设备SN命名的。由于手动重命名这些文件需要时间,我想找到一种更快地重命名它们的方法。例如,我想将文件“65_sample.xlsx”重命名为文件“S1_5.xlsx”。新文件名将用于按位置进一步细分数据。本质上,我有一个包含 192 个电子表格的列表,我想将它们重命名为对分析更有用的东西。

期望的最终结果是 r 中的数据框,其中包含所有数据组合,其中有一列指定原始电子表格(在本例中,该列为“位置”)。我已经编译了电子表格并创建了一个数据框(代码在下面提供)。我正在寻找一种更有效的重命名电子表格的方法,或者更重要的是,重新编码电子表格名称并将它们添加为数据框中的一列。原始文件名中没有可用于重命名或识别的模式。

各个电子表格的布局如下:

Date/Time   Unit    Value
3/14/2022 8:00  C   20.978
3/14/2022 9:00  C   20.978
3/14/2022 10:00 C   20.978
3/14/2022 11:00 C   20.978
3/14/2022 12:00 C   21.354
3/14/2022 13:00 C   21.416
3/14/2022 14:00 C   21.541
3/14/2022 15:00 C   21.666
3/14/2022 16:00 C   21.416
3/14/2022 17:00 C   21.041
3/14/2022 18:00 C   20.853
3/14/2022 19:00 C   20.603

我有一个包含原始文件名(“SN 号”)的 Excel 电子表格以及我希望新电子表格读取的内容(“新”):

SN Number   new 
65_sample   S1_5
75_sample   S1_10
85_sample   S1_20

这是我用来组合电子表格并为文件名(“位置”)创建新列的代码:

files<-list.files(path = ".",
                  pattern = ".xlsx")

columns<-c("Date","C","value","location")
BF_soil_temp_21<-setNames(do.call(rbind,Map(`cbind`, 
                                      lapply(files, read.xlsx), V4=files)), columns)

理想情况下,数据框如下所示,其中位置指的是更新后的文件名(上例中的“new”)而不是原始文件名(上例中的“SN number”):

Date/Time   Unit    Value   location
3/14/2022 12:00 C   1   S 1_5
3/15/2022 12:00 C   21  S 1_10
3/16/2022 12:00 C   22  S 1_20
3/17/2022 12:00 C   23  S 1_5
r
1个回答
0
投票

这里有一个

for loop
解决方案。我根据您的示例创建了三个相同的 .xlsx 文件并将它们保存在我的“测试”目录中,还创建了一个版本的“旧/新名称”文件:

library(readxl)
names_list <- read_excel("c:/test/names_list.xlsx") # old/new .xlsx names

# Create empty df
BF_soil_temp_21 <- data.frame(matrix(NA, nrow=0, ncol=4))
colnames(BF_soil_temp_21) <- c("DateTime", 
                               "Unit",
                               "Value",
                               "location")

# Loop through file names, add new "location" column, and add to "BF_soil_temp_21"
for(i in 1:nrow(names_list)) {

  temp <- read_excel(paste0("c:/test/", names_list[i,1], ".xlsx"))
  temp$location <- names_list[i,2] # Add and populate location column
  BF_soil_temp_21 <- data.frame(rbind(BF_soil_temp_21, temp))) # rbind temp to BF_soil_temp_21

}
© www.soinside.com 2019 - 2024. All rights reserved.