-2

我有 5 个具有相同尺寸的二进制文件(栅格):前四个文件代表参数 1,第五个文件代表具有 10 个类别的土地覆盖图。我想根据土地覆盖类别计算所有四个文件的平均值。所以最后我们会得到每个类对应的4个值。

我对所有文件都试过这个:

  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            .

从我的搜索中,我发现我需要将它们写为数据框才能得到我正在寻找的东西。任何帮助。

4

2 回答 2

3

所以结果似乎是一个列表......为什么不做一些格式化/清理和 make one 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')
于 2013-03-11T17:35:37.807 回答
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")

假设rands在名为“results”的列表中,在这个问题中似乎就是这种情况,请参阅:

> 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")
于 2013-03-11T17:35:04.877 回答