我有大約三十個文件夾,每個文件夾中有許多文件,每個文件都包含不同信息的矩陣。我需要能夠導入這些文件,所以我可以做一個矩陣的圖像圖。我知道如何做圖像繪圖,但我不知道如何獲取所有文件。有沒有辦法循環訪問每個文件夾,並從每個文件夾中獲取我需要的單個文件?這是每年的氣象數據。所以我擁有的是年度文件夾,每個文件夾都包含相同的變量。我需要一個可以從2005文件夾中提取溫度文件的循環,然後從2006文件夾中提取溫度文件等等。這可以通過for循環來完成還是應用?導入多個文件
導入多個文件
回答
看?list.dirs
和相關功能list.files
(兩者以相同的幫助頁文檔)
首先列出目錄,如:
> (dirs <- list.dirs("~/foo", recursive = FALSE))
[1] "/home/gavin/foo/bar1" "/home/gavin/foo/bar2"
然後遍歷這些,列出文件當前目錄並讀入列表中,例如不管是什麼功能
loadFiles <- function(dirs) {
fs <- list.files(dirs, full.names = TRUE, no.. = TRUE)
lapply(fs, read.table, ....)
}
fs <- lapply(dirs, loadFiles)
替代read.table
需要閱讀的文件,與其他參數替換....
到read.table
(或相關的功能)。
然後,您可以使用rapply
來循環fs
來進行繪圖。
注意以上都沒有經過測試,因爲沒有可重複的例子,我可以快速將其放入幾個文件和文件夾中進行測試。
這裏是這種設置的一個例子
> list.dirs("~/foo", recursive = FALSE)
[1] "/home/gavin/foo/bar1" "/home/gavin/foo/bar2"
> list.files("~/foo/bar1")
[1] "file1.csv" "file2.csv" "file3.csv"
> list.files("~/foo/bar2")
[1] "file1.csv" "file2.csv" "file3.csv"
loadFiles <- function(dirs) {
fs <- list.files(dirs, full.names = TRUE, no.. = TRUE)
lapply(fs, function(x) data.matrix(read.csv(x, row.names = 1)))
}
fs <- lapply(list.dirs("~/foo", recursive = FALSE), loadFiles)
fs
現在看起來是這樣的:
> str(fs)
List of 2
$ :List of 3
..$ : num [1:5, 1:5] -1.65 -2.47 1.27 0.14 -0.22 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
..$ : num [1:5, 1:5] 0.417 0.186 -2.452 -0.695 -1.216 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
..$ : num [1:5, 1:5] 1.41924 -1.96918 0.38819 -0.41437 0.00718 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
$ :List of 3
..$ : num [1:5, 1:5] -1.791 0.805 0.302 -0.383 -0.793 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
..$ : num [1:5, 1:5] 0.305 0.353 -0.342 0.515 -0.375 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
..$ : num [1:5, 1:5] -0.634 -0.776 0.517 -0.845 0.83 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
我還沒有完全制定出如何讓rapply()
在這裏工作,但
lapply(fs, function(x) lapply(x, image))
將繪製3個矩陣中的每一個兩個列表中的每一個。
如果每個文件都是10乘10矩陣,我會如何將它們放入數組中。使用你的例子,我將如何將每個file1.csv放入一個矩陣中。這很好,但它列出了每個單獨的矩陣。 – user2113499
@ user2113499你能爲此開始一個新的問題嗎? –
http://stackoverflow.com/questions/16180583/importing-mustiple-matricies-to-one-array-in-r 這是新的問題所在。 – user2113499
在Windows上:
假設你有逐年文件夾D:/data
,並且每個文件夾都有名字文件temperature.csv
# set the main working directory
setwd("D:/data")
# allocate a list for temperature matrices
list.temp.matrix = vector("list",length(list.dirs(recursive=FALSE)))
# iterate through each folder and load the file
i <- 1
for (dir.name in list.dirs(recursive=FALSE))
{
file.name <- paste0(dir.name, "/temperature.csv")
temp.matrix <- as.matrix(read.csv(file.name))
# update the list
list.temp.matrix[[i]] <- temp.matrix
i <- i + 1
# to avoid over-writing plots
x11()
image(temp.matrix)
}
如果你正在尋找讓所有讀取數據幀到當前文件你可以做這樣的事情。我做了一個名爲temp的臨時目錄
> getwd()
[1] "/Users/homedir/tmp"
它有3個不同年份的數據目錄。
> dir()
[1] "data2005" "data2006" "data2007"
在這些是保存的一些文件(它們是相同的爲示例的目的。
> ddfwind <- data.frame(x=runif(10), y=runif(10))
> ddfsun <- data.frame(x=runif(10), y=runif(10))
這些文件保存的目錄設置的例子...
> lapply(dir(), function(x) {
+ save(ddfwind, file=paste(x,"wind.dat",sep="/"))
+ save(ddfsun,file=paste(x,"sun.dat",sep="/"))
+ })
在一個新的R會話,我去tmp目錄,並得到了所有有風的文件從所有目錄的名字
> fn.windData <- dir(pattern="wind.dat$", recursive=TRUE)
然後我用lapply
通過這些文件進行迭代,並將它們加載到當前R對話,追加每一年到數據F結束rame對象。
> lapply(fn.windData, function(x) {
+ L1 <- load(x)
+ assign(paste0(L1, gsub("[a-z./]", "", x)), get(L1), envir=.GlobalEnv)
+ })
> ls()
[1] "ddfwind2005" "ddfwind2006" "ddfwind2007" "fn.windData"
- 1. 導入多個Excel文件
- 2. 導入多個文件R
- 3. 導入多個xml文件
- 4. 將多個文件導入zip文件
- 5. 導入多個文本文件到Matlab
- 6. 將多個文本文件導入Excel
- 7. 在反應中導入多個文件
- 8. 導入多個文件一次
- 9. 在文件中導入多個CSV
- 10. 在python中導入多個文件
- 11. 導入並分配多個文件loadtxt
- 12. Ambari-將多個文件導入到Hive
- 13. 用Javascript導入多個CSV文件
- 14. 在SQL中導入多個DBF文件
- 15. 導入多個.xml文件到DataSet
- 16. 多個導入相同的文件名
- 17. 在R中導入多個xlsx文件
- 18. 導入多個網頁文件
- 19. 打開/導入多個文件vb.net
- 20. 導入和讀取多個文件R
- 21. CSS導入或多個CSS文件
- 22. 導入多個Excel文件到SQL Server
- 23. 導入多個txt文件爲R
- 24. 將多個.csv文件導入到R
- 25. 導入多個文本文件,並跳過在每個文件
- 26. 導入許多csv文件
- 27. sql多文件導入
- 28. 少多文件導入
- 29. 使用Python導入 - 將多個excel文件導入數據框
- 30. Python-將多個文件導入到一個.csv文件
你可以顯示文件夾和文件名稱的格式嗎? (他們是否像'temp2005','temp2006'或其他什麼東西?) –
文件夾2005152,2005182,2005312,2006152,2006182等等。他們是代表一年中三個月的文件夾。每個文件夾中需要的文件標題爲Cirrus_Reflective-_Mean_Daily.mat 我知道如何導入.mat文件 – user2113499