【发布时间】:2017-04-01 17:51:25
【问题描述】:
我一直在尝试找出一种方法来循环遍历包含吸光度数据的一堆“csv”文件。文件名读取为: Plate"x" 0000000.csv - “x”是车牌号,0 代表由观察时间和日期组成的唯一代码。目标是遍历我的源文件夹中的 269 个文件中的每一个,并一致地计算一些值。我已经为计算完成了代码。但是,我无法让 r 循环遍历所有文件,应用计算,然后将输出作为新文件夹中的 csv 文件保存到新文件中:Plate"x" 000000.csv
wd = 'C:/Users/anadamsk/Documents/GRAD/DATA/Ecolog Plates'
setwd(wd)
dirs = dir(getwd())
for (i in 1:269){
#absfiles = list.files(pattern = "*.csv") # list abs files
plate <- read.csv("C:/Users/anadamsk/Documents/GRAD/DATA/Ecolog Plates/absfiles", ".csv", sep="/")
#for (j in 1:269)
#u_IDs = as.data.frame(strsplit(absfiles[j], '[.]'))
#unique_ID = as.character(u_IDs[1])
#plate <- u_IDs
#plate <- fread('C:/Users/anadamsk/Documents/GRAD/DATA/Ecolog Plates/absfiles')
#plate1 <-data.table(plate)
#str(plate)
colnames(plate)[1] <- "Well.ID"
colnames(plate)[3] <- "Absorbance"
#str(plate)
setDT(plate)[, Well.ID:=Well.ID[1L] ,cumsum(Well.ID!='')]
#str(plate)str()
plate[,Well.ID:=as.character(Well.ID)][Well.ID == "BLK", Well.ID := "111BLK"]
plate <- plate[,ID:=substr(Well.ID,4,6)]
plate <- plate[,Group:=ID]
plate <- plate[,Group:=as.factor(Group)]
plate <- plate[Group == "BLK", Group := "0"]
plate <- plate[,Group:=as.character(Group)]
plate <- plate[,Group:=as.numeric(Group)]
plate <- plate[Group > 0.9 & Group < 31.1, Group:= 1]
plate <- plate[Group > 31.1 & Group < 62.1, Group := 2]
plate <- plate[Group > 62.1 & Group < 93.1, Group := 3]
#str(plate$Group)
b1<-plate[Well %in% c("A1"),Absorbance]
b2<-plate[Well %in% c("A5"),Absorbance]
b3<-plate[Well %in% c("A9"),Absorbance]
#group_1<-plate[,abs.c:=Absorbance-b1]
#group_2<-plate[,abs.c:=Absorbance-b2]
#group_3<-plate[,abs.c:=Absorbance-b3]
plate[Group %in% c(1), abs.c:=Absorbance-b1]
plate[Group %in% c(2), abs.c:=Absorbance-b2]
plate[Group %in% c(3), abs.c:=Absorbance-b3]
plate[Group %in% c(1), AWCD:=mean(abs.c)]
plate[Group %in% c(2), AWCD:=mean(abs.c)]
plate[Group %in% c(3), AWCD:=mean(abs.c)]
plate[Group %in% c(1), Odi:=sum(abs.c,c(1))]
plate[Group %in% c(2), Odi:=sum(abs.c,c(2))]
plate[Group %in% c(3), Odi:=sum(abs.c,c(3))]
plate[Group %in% c(1), Pi:=abs.c/Odi]
plate[Group %in% c(2), Pi:=abs.c/Odi]
plate[Group %in% c(3), Pi:=abs.c/Odi]
plate[Group %in% c(1), sumpi:=Pi,c(1)*(log(Pi,c(1)))]
plate[Group %in% c(2), sumpi:=Pi,c(2)*(log(Pi,c(2)))]
plate[Group %in% c(3), sumpi:=Pi,c(3)*(log(Pi,c(3)))]
plate[is.na(plate)] <- 0
plate[Group %in% c(1), H:=sum(sumpi,c(1))]
plate[Group %in% c(2), H:=sum(sumpi,c(2))]
plate[Group %in% c(3), H:=sum(sumpi,c(3))]
H. <- plate[!duplicated(H),]
H. <- H.[!NA]
platechar <-as.character(H.)
#dir.create("./H_Values_Plates")
file=H.(paste("./H_Values_Plates/",".csv",sep="/"))
}
【问题讨论】:
-
没有数据,很难为您提供有效的答案。问题:什么是H?它在你的循环结束时出现。备注:一般情况下,保存到 csv 文件的函数是 write.csv。我会做一个`write.csv(H., file = paste("./H_Values_Plates/",".csv",sep="/"))``
-
欢迎来到 Stack Overflow。正如它所写的,目前还不清楚实际的问题是什么。此外,代码行数过多。请将edit 您的代码降至最低限度,以重现问题。请参阅minimal reproducible example 获取指导。谢谢。
-
感谢您的帮助。 H是表示板块多样性指数的变量。用你建议的 write.csv 结束它似乎是最好的选择。
标签: r loops data.table