我已设法合并来自多个文件的数据,目前正尝试从我的文件中提取文件编号并将其插入到列中。
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组合所有data.Files命名: 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文件对应的每个数据点。
答案 0 :(得分:1)
也许你可以在循环的每次迭代中简单地添加试用号 -
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
}
通过这种方式,您将拥有一个试用号列,该列对应于已导入的文件。
您还可以尝试提取文件名的数字部分,如本答案所述 -
Extract numeric part of strings of mixed numbers and characters in R
答案 1 :(得分:1)
我将使用文件名作为每个列表元素名称的基础,从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))
然后dplyr::bind_rows()
将从列表中创建一个数据框,其中包含.id
列中的处理标签:
library(dplyr)
temp_df <- bind_rows(temp, .id = "TrialNumber")