【问题标题】:Equivalent of by in tidyverse ecosystem相当于 tidyverse 生态系统中的 by
【发布时间】:2023-03-05 16:24:01
【问题描述】:

我想知道如何匹配我的group_by %>% ... 命令的输出,使其与我的by(...) 命令相似?

library(MASS)
library(tidyverse)
set.seed(0)

dd <- data.frame(mvrnorm(40, 0:2, matrix(c(3,1,1,1,3,1,1,1,3),3,3)), k=rep(1:2, each=20))
by(dd[-4], dd$k, function(i) det(cov(i)))

#dd$k: 1
#[1] 16.62934
#--------------------------------------------------------------- 
#dd$k: 2
#[1] 3.849242

# Equivalent of above in tidyverse:
group_by(dd, k) %>% cov() %>% det()  # doesn't match above
#[1] 2.43671

【问题讨论】:

    标签: r function dataframe dplyr tidyverse


    【解决方案1】:

    我们可以使用group_by + summarise 组合。使用cur_data() 将数据传递给cov 函数。

    library(dplyr)  
    library(MASS)
    
    dd %>%
      group_by(k) %>%
      summarise(res = det(cov(cur_data())))
    
    #      k   res
    #* <int> <dbl>
    #1     1 16.6 
    #2     2  3.85
    

    【讨论】:

    • dplyr::summarise(res = det(cov(data.frame(X1, X2, X3))))
    【解决方案2】:

    我们可以使用group_split

    library(dplyr)
    library(MASS)
    library(purrr)
    dd %>%
        group_split(k) %>%
        map(~ det(cov(.x)))
                    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 2017-12-10
      • 2021-06-28
      • 2017-08-27
      • 2019-04-26
      • 1970-01-01
      • 2019-01-26
      • 2011-10-13
      相关资源
      最近更新 更多