【问题标题】:Looping and extracting file numbers from .csv file names and inserting into a column从 .csv 文件名中循环和提取文件编号并插入到列中
【发布时间】:2017-10-17 02:59:10
【问题描述】:

我已成功合并了多个文件中的数据,目前正尝试从我的文件中提取文件编号并将其插入列中。

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 合并所有数据。文件命名为: 试用1.csv 试用2.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 文件对应的每个数据点。

【问题讨论】:

    标签: r csv


    【解决方案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

    【讨论】:

    • 这行不通,因为我合并了 12 个文件。我需要插入一个带有试用号的列,它应该是 1-12 对应于正确的 .csv 文件数据。
    • 我的建议是您在每次迭代结束之前执行此操作,而您目前正在尝试在将所有文件附加在一起之后执行此操作。
    【解决方案2】:

    我将从 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")
    

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2016-07-10
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2019-10-14
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多