[英]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.tri
或lower.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.