繁体   English   中英

获取R中矩阵的元素

[英]get element of a matrix in R

我有一个关联矩阵(Corr),因子名称为A,B,C,D,E(它们分别设置为列名和行名)。

我想创建一个格式为Factor1,Factor2,Corr的数据框,以便将其保存在数据库中。

我正在使用sqldf通过以下查询获取这些因素的所有组合。

SELECT a.Factor as FactorA,
       b.Factor as FactorB 
FROM Factors a cross JOIN Factors b 
WHERE a.Factor>b.Factor

这样我就有5C2行。

现在,我想使用此结果在相关矩阵中查找列名和行名,以获​​得相关的相关因子。 有什么方法可以使用* apply函数,因为我想避免迭代。

数据框应该看起来像

FactorA,FactorB,Corr [FactorA,FactorB]

我真的很感谢您的帮助。

1)在Corr是您的相关矩阵的情况下尝试此操作,例如Corr <- cor(iris[-5])

subset(as.data.frame.table(Corr), as.numeric(Var1) > as.numeric(Var2))

2)如果要使用sqldf,请尝试以下操作:

library(sqldf)
DF <- as.data.frame.table(Corr)
sqldf("select * from DF where Var1 > Var2")

编辑:添加了使用sqldf的解决方案。

df <- expand.grid(colnames(Corr), rownames(Corr))
df$Corr <- apply(df, 1, function(x) Corr[ x[1], x[2] ])
Ltri <- lower.tri(Corr)
df[ Ltri , ]   # the lower triangular data

# I used the longley dataset and the second example on the `cor` help page to test
# (Corr <- cor(longley))

正如@ G.Grothendieck回答问题时通常发生的那样,他的回答比我的回答更具吸引力。 在这种情况下,它需要从因子中恢复数字索引这一事实使它遭受了一些IMO的困扰。 另一方面,当我使用upper.trilower.tri时,我总是有点担心,因为它们看起来也很不直观,因为在您将它们用作带有“ [”的索引之前,它们不会返回元素。 我们中的任何一个都可以使用row(Corr)> col(Corr)达到相同的效果,并且对我的思维方式似乎更清楚了。

替代选择:

df[ row(Corr) > col(Corr) , ]
subset(as.data.frame.table(Corr), row(Corr) > col(Corr))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM