Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 循环并从.csv文件名中提取文件号,然后插入到列中_R_Csv - Fatal编程技术网

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")