R 计算一列与所选其他列之间的相关性(无循环)

R 计算一列与所选其他列之间的相关性(无循环),r,R,是否仍然可以将下面的for循环转换为一行代码,如下所示 w= as.numeric() for(i in 2:10)){ w[i] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs") } 那么: w[1:9] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs") 假设您使用2:10的原因是因为有10个col。如果是这种情况,并且您希望它更加动

是否仍然可以将下面的for循环转换为一行代码,如下所示

w= as.numeric()
for(i in 2:10)){
    w[i] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs")
 }
那么:

w[1:9] = cor(a[,1], a[,i], method = "pearson", use = "complete.obs")
假设您使用
2:10
的原因是因为有10个col。如果是这种情况,并且您希望它更加动态:

w = sapply(c(2:10), function(x) cor(a[,1], a[,x], method = "pearson", use = 'pairwise.complete.obs') )
最后,如果不想使用apply族,可以生成整个
cor
矩阵,并从第一行提取所需内容:

w = sapply(c(2:ncol(a)), function(x) cor(a[,1], a[,x], method = "pearson", use = "complete.obs") )
可复制示例:

w = cor(a, method = 'pearson', use = 'pairwise.complete.obs')[1,-1]
编辑: 如果要检索不同列的相关性(例如2):


此外,根据Joris Meys的建议,请确保使用
'pairwise.complete.obs'

通过将矩阵指定为cor()的y参数,您可以很容易地做到这一点:

>a colnames(a)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

@下划线\u谢谢!刚刚做过:<代码> SpApp(C(2)10),函数(X)Cor(A[[,1 ],A],X],方法=“皮尔森”,使用=“完成。OBS”)< /COD> >谢谢@ TGSMIT61591,<代码> SpEp> <代码> Work,但是如果我不想使用它,而不是第一值,我想与A中的另一个值相关,那么<代码> [1,2:NCOL(A)] < /代码>发生了什么变化?比如我可以使用
[5,1:4&6:10]
?@Christa,我更新了我的答案,使之更适合您的情况。如果这解决了您的问题,请将此答案标记为解决方案!两种解决方案给出不同的结果。如果在sappy()中使用'complete.obs',这相当于在使用cor()创建整个矩阵时使用'pairwise.complete.obx'。谢谢,它首先抛出了一个错误,说没有元素对,但使用了@JorisMeys提到的use='pairwise.complete.obs'。谢谢@Christa I更新了'pairwise.complete.obs'
> 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 
> cor(a, method = 'pearson', use = 'pairwise.complete.obs')[2,-2]
Sepal.Length Petal.Length  Petal.Width 
-0.1175698   -0.4284401   -0.3661259 
> 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