从数据框中提取特定对角线

4

我正在尝试从我的数据中获取特定的对角线。这是我的代码:

a2008=c(30,50,65)
a2009=c(40,90,NA)
a2010=c(55,NA,NA)

mydata=rbind(a2008,a2009,a2010)
mydata
      [,1] [,2] [,3]
a2008   30   50   65
a2009   40   90   NA
a2010   55   NA   NA

我们如何获得对角线 65、90、55?

我已经使用了 diag 函数,但是结果是 30,90,NA

需要一些帮助,谢谢。

5个回答

4
为了获得主对角线,您可以这样做。(使用rev以获取指定顺序)
mydata[row(mydata) + col(mydata) == ncol(mydata) + 1]

您可以通过以下方式获得下方的对角线

mydata[row(mydata) + col(mydata) == ncol(mydata) + 2]

等等


3
你可以通过以下方式尝试获取反对角线:
diag(mydata[,nrow(mydata):1])
[1] 65 90 55

或者

diag(as.matrix(rev(as.data.frame(mydata)))) 

1
或者使用 ncol,这样它就可以用于非方阵。 - IceCreamToucan
哦,是的。好观点! - Roman

2

在调用 diag 之前,您可以通过翻转矩阵来获得该对角线:

diag(mydata[ , 3:1]) # [1] 65 90 55

执行mydata[ , 3:1]是按相反的顺序索引矩阵的列。


2

这是一个矩阵,而不是数据框。这很好!数据框的对角线没有太多意义。我会这样做:

mydata[cbind(1:3, 3:1)]
# [1] 65 90 55

你可以使用矩阵来索引另一个矩阵,这意味着你想要获取行 1、2、3 和列 3、2、1 的值。

1
你可以先翻转矩阵,然后找到对角线来实现这一点。也就是说:
diag(apply(mydata, 1, rev))

我希望这能有所帮助!(保留HTML)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接