如何从R语言数据框中提取特定对角线65、90、55?
提取矩阵的反对角线元素(R语言)
嘿,你遇到的这个问题其实很典型——你想要的是矩阵的反对角线(从右上到左下的那条线)元素,而R自带的diag()函数默认只提取主对角线(左上到右下)的元素,所以才会得到30、90、NA的结果。下面给你两个简单好用的解决方法:
方法一:反转列后提取主对角线
我们可以先把矩阵的列从右到左反转,这样原来的反对角线就变成了新矩阵的主对角线,再用diag()就能轻松拿到目标元素:
# 反转矩阵的列,再提取对角线 diag(mydata[, ncol(mydata):1])
运行这段代码后,你会得到:
[1] 65 90 55
方法二:手动构建索引提取
反对角线的元素有个规律:对于n列的矩阵,第i行的反对角线元素位于第n - i + 1列。我们可以利用这个规律直接构建索引来提取:
n <- ncol(mydata) mydata[cbind(1:n, n:1)]
这段代码会生成反对角线元素的坐标对(比如(1,3)、(2,2)、(3,1)),直接用这些索引就能精准提取你想要的元素,结果和方法一完全一致。
额外说明
这两种方法不仅适用于方阵,就算你的矩阵是长方形的,也能提取出最长的那条反对角线元素,实用性很强~
内容的提问来源于stack exchange,提问作者PrettyClose
相关产品推荐
相关产品推荐

