繁体   English   中英

我如何使用 dplyr 计算 R 中两个数据帧之间的相关性?

[英]How i can calculate correlation between two data frames in R using dplyr?

我在 R 中有两个数据框,比如 data1 和 data2:


a = c(1,2,NA,4,5)
b = c(3,4,5,6,7)
data1 = tibble(a,b);data1



a = c(4,2,4,4,9)
b = c(3,4,4,6,7)
d = c(5,9,3,4,2)
data2 = tibble(a,b,d);data2

我想计算这两个数据框匹配列的相关性。请记住,我可能在某些列向量中有 NA,并且某些列可能不存在于初始数据框 1 中,理想情况下我想报告 NA。我怎么能使用 dplyr 在 R 中做到这一点?

library(tibble)
library(purrr)

a = c(1,2,NA,4,5)
b = c(3,4,5,6,7)
data1 = tibble(a,b)

a = c(4,2,4,4,9)
b = c(3,4,4,6,7)
d = c(5,9,3,4,2)
data2 = tibble(a,b,d)


matched <- intersect(colnames(data1), colnames(data2))
names(matched) <- matched

map_dbl(matched, ~ cor(data1[[.x]], data2[[.x]], use = "complete.obs")) %>% 
  as.matrix() %>% 
  as.data.frame() %>% 
  rownames_to_column()

#>   rowname        V1
#> 1       a 0.7337014
#> 2       b 0.9622504

reprex 包于 2022-07-11 创建 (v2.0.1)

由于data1a列包含 1 个 NA,因此a的输出应为 NA。 你可以这样做

library(tidyverse)

a = c(1,2,NA,4,5)
b = c(3,4,5,6,7)
data1 = tibble(a,b);
data1
#> # A tibble: 5 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     1     3
#> 2     2     4
#> 3    NA     5
#> 4     4     6
#> 5     5     7

a = c(4,2,4,4,9)
b = c(3,4,4,6,7)
d = c(5,9,3,4,2)
data2 = tibble(a,b,d);data2
#> # A tibble: 5 × 3
#>       a     b     d
#>   <dbl> <dbl> <dbl>
#> 1     4     3     5
#> 2     2     4     9
#> 3     4     4     3
#> 4     4     6     4
#> 5     9     7     2

names(data2) %>% 
  map_dbl(~ {col <- if(is.null(data1[[.x]])){
    rep(NA, dim(data1)[1])
  } else {
    data1[[.x]]
  }
  cor(col, data2[[.x]]) 
  }) %>% set_names(names(data2))
#>         a         b         d 
#>        NA 0.9622504        NA

reprex 包于 2022-07-11 创建 (v2.0.1)

或者 usingb stack()会给你一个数据框

names(data2) %>% 
  map_dbl(~ {col <- if(is.null(data1[[.x]])){
    rep(NA, dim(data1)[1])
  } else {
    data1[[.x]]
  }
  cor(col, data2[[.x]]) 
  }) %>% set_names(names(data2)) %>% 
  stack()
#>      values ind
#> 1        NA   a
#> 2 0.9622504   b
#> 3        NA   d

reprex 包于 2022-07-11 创建 (v2.0.1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM