仅关联具有相同名称的列

Correlate only columns with same name

我有两个巨大的数据框,它们的列名和行名相同但值不同。 现在我想计算两个数据帧之间每一列的相关性,但仅限于具有相同名称的列。

  yyyymm `10000` `10001` `10002` `10003` `10004` `10005` `10006`
   <int>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 198601      NA      NA      NA      NA      NA      NA      NA
2 198602      NA      NA      NA      NA      NA      NA      NA
3 198603      NA      NA      NA      NA      NA      NA      NA
4 198604      NA      NA      NA      NA      NA      NA      NA
5 198605      NA      NA      NA      NA      NA      NA      NA
6 198606      NA      NA      NA      NA      NA      NA      NA

两个 datframes 看起来像这样。

意思是我想要第一个数据帧的 10001 列与第二个数据帧的 10001 列的相关性,依此类推。

PS: 缺失值仅在第一行。

“计算相关性”是什么意思? 您可以将两列之间的相关性计算为

cor.test(dataframe1$ColumnX, dataframe2$ColumnX, method = "pearson")

这将为您提供 dataframe1dataframe2 中名为“ColumnX”的列中的值之间的皮尔逊相关系数。

我假设您想计算所有列的相关性,那么遍历所有列名可能是最简单的解决方案*:

names <- names(dataframe1)
correlations <- list()
for(name in names){
   correlations[[name]] <- cor.test(dataframe1[, name], dataframe2[, name], method = "pearson")
}

* 请注意,我在这里做了很多假设。如果没有关于您的数据和目标的更具体信息,就无法真正帮助您。例如,我假设您的数据框被称为 dataframe1dataframe2 并且它们具有完全相同的列名并且您想要计算 all 的皮尔逊相关性 这些数据框中的列。

这个有用吗:

set.seed(111)
df1 <- data.frame(c1 = rnorm(10),
                   c2 = rnorm(10),
                   c3 = rnorm(10))
 df2 <- data.frame(c1 = rnorm(10),
                  c3 = rnorm(10),
                  c2 = rnorm(10))
Map(cor, df1[sort(names(df1))], df2[sort(names(df2))])
$c1
[1] -0.02421313

$c2
[1] 0.2706937

$c3
[1] -0.1615181

或:

unlist(Map(cor, df1[sort(names(df1))], df2[sort(names(df2))]))
         c1          c2          c3 
-0.02421313  0.27069371 -0.16151811 

使用呼噜声:

library(purrr)
pmap(list(df1[sort(names(df1))], df2[sort(names(df2))]), cor)
$c1
[1] -0.02421313

$c2
[1] 0.2706937

$c3
[1] -0.1615181