【问题标题】:get element of a matrix in R获取R中矩阵的元素
【发布时间】:2012-02-22 22:18:53
【问题描述】:

我有一个相关矩阵 (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]

非常感谢任何帮助..

【问题讨论】:

标签: r matrix


【解决方案1】:

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 的解决方案。

【讨论】:

    【解决方案2】:
    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多