[英]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)
)
在這種情況下,數據按id
和Grp
分組。 我想計算target
與var1
和var2
的相關性。 但是,我不知道哪種方法是最有效的方法來使用整潔的方法並基於組來應用它。
我嘗試使用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.