簡體   English   中英

基於多組變量的相關性總結dataframe

[英]Summarise dataframe with correlation of variables based on multiple groups

我正在使用具有兩級分組的數據集。 這里我舉個例子:

set.seed(123)
example=data.frame(
  id = c(rep(1,20),rep(2,20)),  # grouping 
  Grp = rep(c(rep('A',10),rep('B',10)),2),  # grouping
  target = c(rep(1:10,2), rep(20:11,2)),
  var1 = sample(1:100,40,replace=TRUE),
  var2 =sample(1:100,40,replace=TRUE)
)

在這種情況下,數據按idGrp分組。 我想計算targetvar1var2的相關性。 但是,我不知道哪種方法是最有效的方法來使用整潔的方法並基於組來應用它。

我嘗試使用dplyr方法。 喜歡使用:

example %>% group_by(id,Grp) %>% 
  summarise(cor(target,c(var1,var2)))  # length error

甚至創建自定義 function 並應用它。 但這最后只總結了所有數據而沒有分組:

corr_analisis_e = function(df){
  return( cor(df[,'target'] , df[,c('var1','var2')]) )
  
}

example %>% group_by(id,Grp) %>%  corr_analisis_e() # get all the data at once

作為 output,我希望得到類似矩陣或 4 行 2 列的 dataframe 的東西,其中每行是一個組(id 和 Grp),列是 var1 和 var2。 每個值都是cor()方法的結果。

在此處輸入圖像描述

example %>% 
  group_by(id, Grp) %>% 
  summarise(across(c(var1, var2), ~ cor(.x, target)))

# A tibble: 4 x 4
# Groups:   id [2]
     id Grp     var1   var2
  <dbl> <chr>  <dbl>  <dbl>
1     1 A     -0.400  0.532
2     1 B     -0.133 -0.187
3     2 A     -0.655 -0.103
4     2 B     -0.580  0.445

然后可以使用%>% ungroup %>% select(var1:var2)刪除分組列。

暫無
暫無

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

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