2013-03-11 46 views
-2

我有5個二維文件(光柵)具有相同的尺寸:前四個文件代表參數1,第五個文件代表10個類的土地覆蓋圖。我想根據土地覆蓋率計算所有四個文件的平均值類。所以最後我們會得到4個對應於每個類的值。如何在R中將數個矩陣的輸出寫入數據幀?

我想這對所有文件:

dir1<- list.files("C:\filesh", "*.img", full.names = TRUE) 
    fre <- file("C:\\landover_from Suj1440a.bin","rb") 
    sdf<- readBin(fre, integer(), size=1, n=1440*720, signed=F) 
    results<- list() 
for (.files in seq_along(dir1)){ 
    list1 <- readBin(dir1[.files], numeric(), size = 4, n = 1440*720, signed = TRUE) 
    list1=tapply(list1, sdf, mean, na.rm=TRUE) 
    results[[length(results) + 1L]]<- list1} 

看來,它的工作沒有錯誤: 寫結果:

for (i in seq_along(results)){ 
    write.table(results[[i]], paste("C:\\Users\\filesh\\data", ".txt", sep=""),append=TRUE)} 

我會擁有所有結果中的一個文本文件像......

x 
    1  0.2 
    2  0.5 
    3  0.2 
x 
1  0.1 
2  0.5 
3  0.6 

4我想輸出爲一個文本文件有一個會喜歡的結果:從我的搜索

   1 2 3 4 5 6 7 ... 
x   0.2 0.5 0.2 . . . . ... 
x   0.1 0.5 0.6 
x   . . . . . . . ... 
x   . 

我發現我需要給他們寫的數據幀得到我所期待for.Any幫助。

+0

@geektrader爲什麼你總是冷靜下來?我做了,但我們是如何做到這一點的,因爲我有來自不同文件的輸出。 – 2013-03-11 17:36:08

+0

你怎麼知道@geektrader downvoted你? – 2013-03-11 17:44:29

+0

真的不可能真正知道誰低估了,除非他們出來說出來。指責其他用戶做他們未曾做過的事情只會保證你以後不會幫助你!請仔細閱讀[R tag wiki](http://stackoverflow.com/tags/r/info)及其文檔。對於SO目的,還請仔細閱讀關於製作可重複示例的最後一個鏈接。當有人低估你的問題時,不要自動刪除它。相反,努力改善你的問題,並給予這個人一個反轉他們投票的機會。並且,歡迎和祝你好運! – A5C1D2H2I1M1N2O1R2T1 2013-03-11 17:46:45

回答

2

從你前面的問題,您由於某種原因被刪除,你可以用rbind

> r= c(5,4,5,4,2,5) 
> s= c(5,4,5,4,2,5) 
> rbind(r, s) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
r 5 4 5 4 2 5 
s 5 4 5 4 2 5 
> write.table(rbind(r, s), file = "myfile.txt") 

假設rs是在一個名爲「結果」列表中,這似乎是在案件這個問題看到:

> results <- list(r = r, s = s) 
> results 
$r 
[1] 5 4 5 4 2 5 

$s 
[1] 5 4 5 4 2 5 

> write.table(do.call(rbind, results), file = "myfile.txt") 
+0

30秒太慢:( – EDi 2013-03-11 17:36:31

3

所以結果似乎是一個列表... 爲什麼不能做一些格式化/清洗和做一個write.table電話嗎?

下面是一個例子,但是由於您沒有提供可重複的例子,因此很可能會失敗。

# create data 
df <- read.table(header = TRUE, text = "'x' 
'0' 0.16 
'2' 0.15 
'3' 0.16 
'4' 0.10 
'5' 0.18 
'6' 0.02 
'7' 0.11 
'8' 0.06 
'9' 0.07 
'10' 0.17 
'11' 0.06 
'12' 0.07") 

# make list 
df_list <- list(df, df) 


# merge columns 
out <- do.call(cbind, df_list) 
names(out) <- paste0('x', 1:ncol(out)) 

# transpose 
out_t <- t(out) 
write.table(out_t, 'data.txt') 
+0

+1「然而,因爲你沒有提供一個可重複的例子,它可能會失敗。」:) – A5C1D2H2I1M1N2O1R2T1 2013-03-11 17:54:16