2017-10-17 63 views
1

对于使用任何编码软件,我都是全新的,对于与我无关的语言不太好。我正在学习使用Rstudio。从.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 { 
     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文件对应的每个数据点。

回答

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

+0

这不起作用,因为我有12个文件组合在一起。我需要插入一个带有试用编号的列,它应该是1-12,对应于正确的.csv文件数据。 – REV

+0

我所建议的是,在每次迭代结束之前都要这样做,而您目前正在尝试在将所有文件附加在一起后执行此操作。 –

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") 
相关问题