簡體   English   中英

計算 2 個數據幀中變量之間的相關性

[英]Computing correlations between variables in 2 dataframes

我正在嘗試計算以下國家與美國的相關性。 我的第一個 df 中有一個相對較大的數據集,其中包含 80 多個變量和 3000 多個觀察值,如下所示,因此我嘗試使用 R 來自動執行此操作,而不是使用 excel。

我正在嘗試計算第一個 df 中的國家(即德國、意大利、日本等)與第二個 df 中的美國的相關性。 所以它應該去德國 - 美國,意大利 - 美國,日本 - 美國等等。

不太確定我應該如何開始 - 我應該循環第一個表中的每一列以與第二個中的 USA 相關聯嗎? 非常感謝幫助。

謝謝!

df1

日期 德國 意大利 日本 更多國家...
01-01-2020 1000 200 2304 更多數字...
01-02-2020 2000年 389 2098 更多數字...

等等

df2

日期 美國
01-01-2020 500
01-02-2020 600

等等

這樣的事情應該可以解決問題:

library(dplyr)

df1 <- 
  tibble(
    date = 2001:2010,
    Germany = runif(10),
    Italy = runif(10),
    Japan = runif(10)
  )

df2 <-
  tibble(
    date = 2001:2010,
    USA = runif(10)
  )

df.cor <-
  df1 %>%
  summarise(across(-one_of('date'), ~ cor(.x, df2$USA)))

df.cor

注意:您必須確保df1df2之間的日期一致。 您可以使用 join 函數(例如left_join )來確保這一點

您可以使用這種方法:

library(dplyr);library(magrittr)
countries = c("Germany", "Italy", "Japan")
left_join(df1, df2) %>% summarise(across(countries, ~cor(., USA)))

或者,由於 OP 無法訪問最新版本的dplyrdplyr across()

left_join(df1, df2) %>% summarise_at(countries, ~cor(., USA))
  1. left_joindf1df2合並在一起,以便日期始終相互匹配
  2. summarise允許您執行按列操作
  3. across告訴您要與 USA 關聯的列
  4. ~cor(., USA)表示取每個國家並執行與美國的相關性
Germany  Italy  Japan
    <dbl>  <dbl>  <dbl>
1  -0.393 -0.147 -0.214

感謝 Damien Georges 提供的數據。

這里有兩個基本的 R 解決方案,具體取決於您想要的最終格式。
兩者都帶有 R 4.1.0 中引入的新管道運算符。

df2[-1] |> cor(df1[-1]) |> as.data.frame()
#      Germany     Italy     Japan
#USA 0.3161338 0.5483885 0.1725733

df1[-1] |> cor(df2[-1]) |> as.data.frame()
#              USA
#Germany 0.3161338
#Italy   0.5483885
#Japan   0.1725733

更傳統但等效的版本:

as.data.frame(cor(df2[-1], df1[-1]))
as.data.frame(cor(df1[-1], df2[-1]))

數據

Damien Georges借用的數據創建代碼。

set.seed(2021)
df1 <- 
  data.frame(
    date = 2001:2010,
    Germany = runif(10),
    Italy = runif(10),
    Japan = runif(10)
  )

df2 <-
  data.frame(
    date = 2001:2010,
    USA = runif(10)
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM