簡體   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