w= as.numeric()
for(i in 2:10)){
w[i] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs")
}
无论如何将以下for循环转换为一行代码,如下所示?
w[1:9] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs")
答案 0 :(得分:3)
怎么样:
w = sapply(c(2:10), function(x) cor(a[,1], a[,x], method = "pearson", use = 'pairwise.complete.obs') )
假设你使用2:10
的原因是因为有10个cols。如果是这种情况,并且您希望它更具动态性:
w = sapply(c(2:ncol(a)), function(x) cor(a[,1], a[,x], method = "pearson", use = "complete.obs") )
最后,如果您不想使用申请系列,则可以生成整个cor
矩阵并从第一行中提取您需要的内容:
w = cor(a, method = 'pearson', use = 'pairwise.complete.obs')[1,-1]
可重复的例子:
> a = iris[,1:4]
> cor(a, method = 'pearson', use = 'pairwise.complete.obs')[1,-1]
Sepal.Width Petal.Length Petal.Width
-0.1175698 0.8717538 0.8179411
修改强> 如果要检索其他列的相关性(例如2):
> cor(a, method = 'pearson', use = 'pairwise.complete.obs')[2,-2]
Sepal.Length Petal.Length Petal.Width
-0.1175698 -0.4284401 -0.3661259
另外,根据Joris Meys'建议,请务必使用'pairwise.complete.obs'
答案 1 :(得分:1)
通过将矩阵指定为cor()的y参数,可以非常轻松地完成此任务:
> a <- matrix(runif(100),ncol=5)
> colnames(a) <- LETTERS[1:5]
> cor(a[,2], a[,c(3:5,1)], use = 'pairwise.complete.obs')
C D E A
[1,] 0.3096647 0.6383469 -0.3527352 -0.08329776
这可以避免计算您不感兴趣的相关性。如果您要从cor(a)
中选择相关的相关性,您还可以计算其他列之间的所有相关性。
请注意 - 不像您在sapply()
解决方案中所做的那样 - 您需要将use
设置为pairwise.complete.obs
。否则R将删除其中一列中缺少值的所有行。
另见?cor