仅关联具有相同名称的列
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")
这将为您提供 dataframe1
和 dataframe2
中名为“ColumnX”的列中的值之间的皮尔逊相关系数。
我假设您想计算所有列的相关性,那么遍历所有列名可能是最简单的解决方案*
:
names <- names(dataframe1)
correlations <- list()
for(name in names){
correlations[[name]] <- cor.test(dataframe1[, name], dataframe2[, name], method = "pearson")
}
*
请注意,我在这里做了很多假设。如果没有关于您的数据和目标的更具体信息,就无法真正帮助您。例如,我假设您的数据框被称为 dataframe1
和 dataframe2
并且它们具有完全相同的列名并且您想要计算 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
我有两个巨大的数据框,它们的列名和行名相同但值不同。 现在我想计算两个数据帧之间每一列的相关性,但仅限于具有相同名称的列。
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")
这将为您提供 dataframe1
和 dataframe2
中名为“ColumnX”的列中的值之间的皮尔逊相关系数。
我假设您想计算所有列的相关性,那么遍历所有列名可能是最简单的解决方案*
:
names <- names(dataframe1)
correlations <- list()
for(name in names){
correlations[[name]] <- cor.test(dataframe1[, name], dataframe2[, name], method = "pearson")
}
*
请注意,我在这里做了很多假设。如果没有关于您的数据和目标的更具体信息,就无法真正帮助您。例如,我假设您的数据框被称为 dataframe1
和 dataframe2
并且它们具有完全相同的列名并且您想要计算 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