R 循环并从.csv文件名中提取文件号,然后插入到列中
我已经设法合并了几个文件中的数据,目前正试图从我的文件中提取一个文件号,并将其插入到一列中R 循环并从.csv文件名中提取文件号,然后插入到列中,r,csv,R,Csv,我已经设法合并了几个文件中的数据,目前正试图从我的文件中提取一个文件号,并将其插入到一列中 fnames = dir("../data/temperature_trials", full.names=TRUE) print(fnames) for (i in 1: length(fnames) ) { #open each file in turn temp = read.csv(fnames[i]) if (i == 1) { res = temp } else {
fnames = dir("../data/temperature_trials", full.names=TRUE)
print(fnames)
for (i in 1: length(fnames) ) {
#open each file in turn
temp = read.csv(fnames[i])
if (i == 1) {
res = temp
} else {
res = rbind(res, temp)
}
}
```
导入12.csv文件,并使用rbind合并所有数据。文件名:
Trial1.csv
Trial2.csv
.
.
.
Trial12.csv
```
for (i in 1: length(fnames)) {
loc = regexpr(pattern = "Trial[0-9]*", text = fnames[i])
trialNumber = as.numeric(substr(fnames[i], start = loc[[1]][1]+5,
stop = loc[[1]][1] + attr(loc, 'match.length')-1))
print(trialNumber)
res1 = cbind(trialNumber, res)
```
我试图从每个.csv文件名中提取试用编号,并将其放入名为TrialNumber的列中。当我这样做时,对于每个数据点,它将只在该列中放置一个12。因为它使用的是循环,所以我假设这就是原因,但无法找出如何解决这个问题或其他解决方法。我需要为每个.csv文件对应的每个数据点分配试用号 也许您可以在循环的每次迭代中简单地添加试用号-
for (i in 1: length(fnames) ) {
#open each file in turn
temp = read.csv(fnames[i])
if (i == 1) {
res = temp
} else {
res = rbind(res, temp)
}
res$trial_number=i
}
这样,您将有一个试用编号列,该列将对应于已导入的文件
您还可以尝试提取文件名的数字部分,如本答案中所述-
我将使用文件名作为每个列表元素名称的基础,从CSV文件创建一个数据帧列表:
fnames <- list.files("full/path/to/data/temperature_trials",
pattern = "*.csv", full.names = TRUE)
temp <- lapply(fnames, read.csv)
names(temp) <- tools::file_path_sans_ext(basename(fnames))
这将不起作用,因为我有12个文件组合。我需要插入一个带有试用编号的列,它应该是1-12,与正确的.csv文件数据相对应。我建议您在每次迭代结束前执行此操作,而您当前正在尝试在将所有文件附加到一起后执行此操作。
library(dplyr)
temp_df <- bind_rows(temp, .id = "TrialNumber")