除了使用for
循环之外,是否有更好的方法在所有成员之间应用cor():
crosses1 = colnames(data)
crosses1 = crosses1[-(match("Date", crosses1))]
crosses2 = rev(crosses1)
crosses = matrix(nrow = length(crosses1), ncol = length(crosses2), dimnames = list(crosses1, crosses2))
for(cross1 in crosses1){
for(cross2 in crosses2){
corValue = cor(data[,cross1], data[,cross2], use = "pairwise.complete.obs", method = "pearson")
crosses[cross1,cross2] = corValue
}
}
data
只是一个矩阵,其中列是代码,行是特定日期这些代码的不同值。所以,我想在每个代码之间建立互相关。
为我缺乏经验而道歉,但我正在学习R。
感谢。
答案 0 :(得分:1)
cor
已经这样做,只需将矩阵传递给函数,如下所示。
X <- replicate(4, rnorm(10)) # Create some toy data
rownames(X) <- paste0("Obs", 1:nrow(X))
colnames(X) <- paste0("Var", 1:ncol(X))
print(X)
# Var1 Var2 Var3 Var4
#Obs1 2.28277343 -0.2554098 -1.6855545 -0.88925980
#Obs2 0.18893139 1.8864308 -2.3971334 -0.79902474
#Obs3 0.15952813 -0.3048320 -2.2321410 -0.96378752
#Obs4 -0.50163072 1.9142441 0.2959703 0.19532908
#Obs5 0.04480382 0.8919782 -1.5025163 1.28883810
#Obs6 -1.27758040 -1.2707019 -0.3497341 1.19329181
#Obs7 -0.01028843 -0.9573063 0.3820127 -0.90302080
#Obs8 0.30440036 0.6356221 -0.8722866 0.67146318
#Obs9 2.10757600 0.6366983 -0.5190173 -0.51735927
#Obs10 2.93849016 0.8399872 1.3714519 0.09522004
cor(X)
# Var1 Var2 Var3 Var4
#Var1 1.0000000 0.14661593 0.19663054 -0.38305468
#Var2 0.1466159 1.00000000 -0.06886487 0.03659647
#Var3 0.1966305 -0.06886487 1.00000000 0.23375487
#Var4 -0.3830547 0.03659647 0.23375487 1.00000000