仅关联具有相同名称的列

时间:2021-05-30 13:56:18

标签: r dataframe sapply

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

  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

两个数据框都是这样的。

意思是我想要第一个数据帧的 10001 列与第二个数据帧的 10001 的相关性等等。

PS:缺失值仅在第一行。

2 个答案:

答案 0 :(得分:0)

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

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 这些数据框中的列。

答案 1 :(得分:0)

这行得通吗:

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 

使用 purrr:

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