首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新格式化R中的关联矩阵,以删除右上半行中的行名、列名和单元格

重新格式化R中的关联矩阵,以删除右上半行中的行名、列名和单元格
EN

Stack Overflow用户
提问于 2013-11-17 12:27:24
回答 2查看 2.2K关注 0票数 0

为了在R中输入扫描电镜的相关矩阵,我需要以三种方式重新格式化一个矩阵:

  • 删除行名
  • 删除列名
  • 移除矩阵右上半部分的所有单元格,位于对角线1值之上。

换句话说,矩阵。

代码语言:javascript
复制
          EDU       CLASS       INCOME    AUTONOMY        COL5         ALT5         IIDM
EDU       1.00000000 -0.14591135  0.246463592  0.21938208 -0.09727587 -0.043862753  0.062896738
CLASS    -0.14591135  1.00000000 -0.048511437 -0.01469029  0.01663138  0.036140650 -0.010155653
INCOME    0.24646359 -0.04851144  1.000000000  0.13778603 -0.06969773 -0.051922861  0.009402784
AUTONOMY  0.21938208 -0.01469029  0.137786034  1.00000000 -0.25223015  0.023174980  0.073941520
COL5     -0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000 -0.300825028 -0.062978212
ALT5     -0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000  0.001553936
IIDM      0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

..。需要成为文字..。

代码语言:javascript
复制
 1.00000000
-0.14591135  1.00000000
 0.24646359 -0.04851144  1.000000000
 0.21938208 -0.01469029  0.137786034  1.00000000
-0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000
-0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000
 0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

..。在readMoments函数中逐行输入,如下所示。

代码语言:javascript
复制
R.bd <- readMoments(names=c('EDU',
                            'CLASS',
                            'INCOME',
                            'AUTONOMY',
                            'COL5',
                            'ALT5',
                            'IIDM'))
 1.00000000
-0.14591135  1.00000000
 0.24646359 -0.04851144  1.000000000
 0.21938208 -0.01469029  0.137786034  1.00000000
-0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000
-0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000
 0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

我们目前正在通过复制、删除和粘贴手工完成此操作。任何关于如何编写函数的建议都将不胜感激。

谢谢,乔纳森

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-17 13:39:45

您可以直接创建对象R.bd。您不需要逐行输入。

假设dat是对象的名称(数据帧或矩阵):

代码语言:javascript
复制
dat[upper.tri(dat)] <- 0 # replace all elements above the diagonal with 0
R.bd <- as.matrix(dat)  # transform to matrix (not necessary if it's a matrix)

就这样。您不需要指定名称,因为它们已经在矩阵对象中了。

票数 0
EN

Stack Overflow用户

发布于 2013-11-17 12:38:05

假设dat是您的相关矩阵。

代码语言:javascript
复制
> dat <- as.matrix(dat)
> dimnames(dat) <- list(rep("", ncol(dat)), rep("", ncol(dat)))
> dat[upper.tri(dat)] <- NA
> print(dat, na.print = " ") 
                       # you can also make a replacement `dat[is.na(dat)] <- " "`

  1.00000000                                                               
 -0.14591135  1.00000000                                                   
  0.24646359 -0.04851144  1.000000000                                      
  0.21938208 -0.01469029  0.137786034  1.00000000                          
 -0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000              
 -0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503 1.000000000  
  0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821 0.001553936 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20030646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档