我想在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时,它会给我一个错误。先感谢您。
答案 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]))
}