如何在R语言中实现MATLAB的reshape(X3,[],5)功能?
解决R中Brick对象转矩阵丢失波段维度的问题
嘿,我懂你遇到的这个困扰——用brick()读取多波段TIFF后,想用as.data.frame.matrix()转成矩阵却丢了波段维度,确实挺闹心的。别慌,咱们来一步步搞定它!
问题出在哪?
as.data.frame.matrix()这个函数是把栅格对象当成二维结构来处理的,它只会提取栅格的空间维度(行×列),直接忽略了波段这个第三维度,所以才会得到200×150的结果,把5个波段的信息给弄丢了。
正确的解决方法
咱们得用专门针对栅格对象的函数来提取像素-波段的数值,values()就是干这个的!它会直接把每个像素的所有波段值提取出来,形成一个行数为nrows×ncols、列数为nbands的结构,完美匹配你的需求。
具体代码如下:
# 读取多波段TIFF文件 a <- brick('X3.tif') # 提取所有像素的波段值并转为矩阵 A <- as.matrix(values(a)) # 验证维度是否正确(应该输出 30000 5,因为200*150=30000) dim(A)
额外小提示
- 如果想要得到数据框而非矩阵,直接用
as.data.frame(values(a))就行,之后再转矩阵也完全没问题。 - 要是你需要保留像素的坐标信息,可以用
rasterToPoints(a),它会返回包含x、y坐标和各波段值的数据框,之后你只需要去掉坐标列,就能得到纯波段值的矩阵了。
内容的提问来源于stack exchange,提问作者Siddharth Chaudhary
相关产品推荐
相关产品推荐

