【问题标题】:How to obtain diagonal elements of the matrix in R如何在R中获得矩阵的对角线元素
【发布时间】:2018-10-20 06:41:38
【问题描述】:

我有一个随附的数据集。

我想从这个矩阵中提取对角线元素。输出应如下所示。我该如何使用 R 来完成它?

请找到excel文件的链接。

https://1drv.ms/x/s!AmU_Vk1czmwRgWFvnMYsga56vVMb

dput(df) 的输出:

X X1 X2 X3 X4 X5 X6  X7 X8 X9 X10
1  11  1 12  4 46 78 45  89 45 45   7
2  12  2 56  5 12 12 23 566 26  6    
3  13  3 23 23 28 24 28  23 23       
4  14  4 45 12 26 46 24  12          
5  15  5 89 56 24 68 27              
6  16  6 23 26 26 78                 
7  17  8 23 24 24                    
8  18  9 12 27                       
9  19 12 45                          
10 20 56


structure(list(X = 11:20, X1 = c(1L, 2L, 3L, 4L, 5L, 6L, 8L, 
9L, 12L, 56L), X2 = c("12", "56", "23", "45", "89", "23", "23", 
"12", "45", " "), X3 = c("4", "5", "23", "12", "56", "26", "24", 
"27", " ", " "), X4 = c("46", "12", "28", "26", "24", "26", "24", 
" ", " ", " "), X5 = c("78", "12", "24", "46", "68", "78", " ", 
" ", " ", " "), X6 = c("45", "23", "28", "24", "27", " ", " ", 
" ", " ", " "), X7 = c("89", "566", "23", "12", " ", " ", " ", 
" ", " ", " "), X8 = c("45", "26", "23", " ", " ", " ", " ", 
" ", " ", " "), X9 = c("45", "6", " ", " ", " ", " ", " ", " ", 
" ", " "), X10 = c("7", " ", " ", " ", " ", " ", " ", " ", " ", 
" ")), row.names = c(NA, -10L), class = "data.frame")

【问题讨论】:

  • 请尝试包含您的数据的可复制粘贴版本,以便我们可以看到它实际上是如何存储在 R 中的。您的问题是关于提取对角线元素(可以使用 diag() 轻松完成) ,但随后输出似乎显示了一个转置矩阵(可以使用t() 完成)。
  • 我试过 diag() 和 t()。他们提取对角线的另一边。我已上传文件以进行复制。谢谢。 @马吕斯
  • @xkcvk2511 - 最好只在您的问题中包含dput(df) 的输出,其中“df”是数据框的名称,而不是 excel 文件。
  • 嗨 @LukeC 添加了一个示例以及 excel 文件。

标签: r matrix data.table data-manipulation


【解决方案1】:

我会颠倒列的顺序 - 然后您可以将其转换为矩阵并轻松获取对角线:

df[ncol(df):1] %>% 
  as.matrix() %>% 
  diag()

或者如果您不熟悉管道运算符 (%>%),则等效:

diag(as.matrix(df[ncol(df):1]))

【讨论】:

  • 谢谢,我设法使用了gather、group_by、filter和cbind的组合,得到了想要的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多