通过使用循环并制作矩阵,从60 csv文件导入类似的列(例如pH列)。

时间:2016-10-23 23:47:27

标签: r

我想在60个csv文件的目录中创建一个读取特定列(比如说pH值)的循环,然后将该列作为目录中文件的顺序写在csv文件中。

directory <- "C:/"
file_name <- list.files(directory, pattern = ".csv")
files.to.read <- paste(directory,  file_name, sep="/")
for (i in 1:length(files.to.read)) {
  dta <- read.csv(files.to.read[i], header=TRUE)
  x<-dta$pH_
}

我如何对此进行编码,以便为我提供一个包含60列x彼此相邻的csv文件。请注意,所有文件中的行数不一定相等,因此当我对它们进行cbind时,它会给我一个错误。先感谢您。

1 个答案:

答案 0 :(得分:0)

directory <- "C:/"
file_name <- list.files(directory, pattern = ".csv")
files.to.read <- paste(directory,  file_name, sep="/")
x<-list()

我建议您将CSV中的数据存储在列表中:

for (i in 1:length(files.to.read)) {
  dta <- read.csv(files.to.read[i], header=TRUE)
  x[[i]]<-dta$pH
}

创建一个空变量来存储每个pH数据集的长度

ListLength<-NULL


for (i in 1:length(x)){
  ListLength<-c(ListLength, length(x[[i]]))
}

然后制作另一个变量以确定每个色谱柱与最长pH数据集的差异。称之为ManyNAs

ManyNAs<-max(ListLength)-ListLength

创建一个空行数据帧,其行数与最长的pH数据集一样多。

OutputDF<-data.frame(matrix(NA, nrow = max(ListLength), ncol = length(file_name)))

然后添加额外的NA以使数据帧满意。

for (i in 1:length(x)){
  OutputDF[,i]<-c(x[[i]],rep(NA, ManyNAs[i]))

}

write.csv(OutputDF, "OutputDF.csv")

如果你真的不想在你的最终CSV文件中使用NA,你可以这样做:

for (i in 1:length(x)){
   OutputDF[,i]<-c(x[[i]],rep("",ManyNAs[i]))
}