2013-03-11 39 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