2014-04-03 77 views
0

我對R很新,似乎很難創建一個for循環來創建一個包含6個圖表(2列x 3行)的PDF圖形表。我正在使用以下循環將CSV導入到單獨的數據框中。批量在R中創建圖形表

##create filenames object that lists the csv files in a folder 
filenames <- list.files(path="C:/Survey_Stage/Data_Transfer/Survey_Stage/Stage_Discharge_Relations/CIDA/", pattern="*.csv") 

##run loop that imports each csv file in the folder, creates a dataframe, assigns the filename to the dataframe, and adds column names 
for(i in filenames) 
{ 
filepath <-file.path("C:/Survey_Stage/Data_Transfer/Survey_Stage/Stage_Discharge_Relations/CIDA/", paste(i, sep=",")) 
assign(i, read.table(filepath, header = TRUE, sep = ",")[,c('SP_elev', 'flow')]) 
} 

在我的項目中的這一點上,我總共有23個csv,並且想要生成6張圖表。

繼承人是從csv導入循環中生成的數據框的示例。

> Z041R.csv 
    SP_elev flow 
1 840.5466 5430 
2 840.9774 8285 
3 841.1020 9162 
4 841.2236 10175 
5 842.4053 18450 
6 840.7600 6780 
7 840.9493 8110 
8 841.6590 12700 
9 842.6615 20200 
10 841.2138 10175 
11 845.0801 41977 
12 841.4786 11431 
13 841.6829 13000 
14 845.1645 42500 
15 841.6142 12400 
16 841.2574 10200 
17 842.2315 16400 
18 840.9390 8040 

我的流量是自變量,SP_elev是因變量。我已經想出瞭如何單獨創建grahic工作表,但真的很想使用for循環來自動化該過程。有任何想法嗎?

繼承人我試過的循環。

##run loop to plot the csv files 

pdf(file="myplots.pdf",paper="letter") 

par(mfrow=c(3,2)) 

for(i in filenames) 
{ 
plot (data.frame(i[flow], i[elevation]), xlab=expression(paste("Discharge (", ft^3, "/s)",sep = "")), ylab= "Elevation (m)", main = i) 
} 

dev.off() 

感謝,

Dubbdan

+0

這不僅僅是一個3行2列的空白圖,我似乎無法獲得每個數據幀的繪圖 – dubbbdan

+0

所以告訴我們你的代碼和我們將tr y來調試它 –

+0

我編輯了我的原始文章 – dubbbdan

回答

0

這是@BigFinger的解決方案只是一個小調整(有註解):

# read in list of filenames 
filenames <- list.files(path="C:/Survey_Stage/Data_Transfer/Survey_Stage/Stage_Discharge_Relations/CIDA/", pattern="*.csv") 

# open the PDF device 
pdf(file="myplots.pdf", paper="letter") 

# loop through the filenames 
for(i in filenames) { 

    # build the path to the current file 
    filepath <- file.path("C:/Survey_Stage/Data_Transfer/Survey_Stage/Stage_Discharge_Relations/CIDA", paste(i)) 

    # read in the data frame 
    dat <- read.csv(filepath) 

    # plot the chart using column names just incase they aren't all in the same exact format 
    plot (dat[,c('SP_elev', 'flow')], xlab=expression(paste("Discharge (", ft^3, "/s)",sep = "")), ylab= "Elevation (m)", main = i) 

} 

# close the PDF device 
dev.off() 

您可以在plotmain = gsub(".csv", "", i, fixed=TRUE)如果你不想在plot標題中輸入.csv,請打電話

+0

上述解決方案效果很好。我不得不添加線par(mfrow = c(3,2))來創建圖的數組。非常感謝您的幫助 – dubbbdan

+0

如果我有一個'Z001R.csv'的數據框名稱,並且我想讓主標題讀取001R,我如何使用gsub刪除第一個字符'Z'和文件擴展名'.csv 「? – dubbbdan

+0

'gsub(「(^ Z | \\。csv $)」,「」,i)'應該可以工作 – hrbrmstr

0

我認爲你需要這樣的事情。假設每個csv文件都有2列。否則,提取從變量「crtdata需要的列

pdf(file="myplots.pdf",paper="letter") 
for(i in filenames) 
{ 
    crtdata = read.csv(i) 
    plot (crtdata, xlab=expression(paste("Discharge (", ft^3, "/s)",sep = "")), ylab= "Elevation (m)", main = i) 
} 
dev.off() 
+0

我一直在使用pdf()命令。我認爲我的問題是指數據框名稱列表。我試圖在for循環中簡單地使用'i'。我認爲我缺少一些語法。我編輯了我的原始帖子,以顯示我正在嘗試的循環。 – dubbbdan