我有一個專案檔案夾 (project1),其中包含來自 20 個主題(Sub-001、Sub-002 等)的資料。每個主題的檔案夾都包含一個子檔案夾(名為 AD),其中包含一個 AD.csv 相關矩陣。
檔案夾結構如下
├── Sub-001
│ └── AD
│ └── AD.csv
└── Sub-002
└── *
我想撰寫一個 for 回圈,迭代地進入每個主題的 AD 檔案夾,將 AD.csv 矩陣從寬到長重塑,并將重塑后的矩陣保存為新的 subj_AD_reshape.csv 檔案,以主題的 ID 命名(例如,Sub- 001_AD_reshape.csv),在主題的檔案夾中。
我寫的代碼:
files<-list.files("group/S/project1/")
subjects<-list.dirs(path=files, full.names=T, recursive=F)
subj.AD<-subjects/"AD"
for (subj.AD in 1:length(subjects)) {
df<-read.csv("matrix.csv", sep="", header=F)
df.matrix<-as.matrix(df)
df.matrix[lower.tri(df.matrix)]<-NA
df.matrix.melt<-as.data.frame(reshape2::melt(df.matrix, na.rm=T))
write.csv(df.matrix.melt, file="subjects/Subject_AD_reshaped.csv))
}
此代碼不起作用主要是因為 R 似乎無法識別輸入和輸出的 AD 檔案夾。撰寫此 for 回圈的最佳方法是什么?
uj5u.com熱心網友回復:
也許下面的代碼可以解決問題。
base_path <- "group/S/project1"
subjects <- list.dirs(path = base_path, full.names = TRUE, recursive = FALSE)
for(s in subjects){
fl <- file.path(s, "AD", "AD.csv")
df1 <- read.table(fl, sep = ",")
df1.matrix <- as.matrix(df1)
is.na(df1.matrix) <- lower.tri(df1.matrix)
df2 <- as.data.frame(df.matrix)
df2.melt <- reshape2::melt(df2, na.rm = TRUE)
out_file <- paste0(basename(s), "_AD_reshaped.csv")
out_file <- file.path(s, out_file)
write.table(df2.melt, out.file, sep = ",", row.names = FALSE)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315538.html
上一篇:如何使用簡單的for回圈從python中的字串中提取句子?
下一篇:在delphi中銷毀json陣列
