【问题标题】:Apply a function with multiple outputs to dataframe that is split by factors in the tidyverse将具有多个输出的函数应用于按 tidyverse 中的因子拆分的数据帧
【发布时间】:2020-03-04 08:54:22
【问题描述】:

我有一个表单的数据框:

y       x1      x2      x3      factor
-----------------------------------------------
numeric numeric numeric numeric factor_level_1
...     ...     ...     ...     ...
numeric numeric numeric numeric factor_level_2
...     ...     ...     ...     ...
numeric numeric numeric numeric factor_level_3
...     ...     ...     ...     ...

我正在尝试将 yhat 包中的 commonalityCoefficients 函数应用于我的数据帧的子集,并由 factor 拆分。

从文档中,commonalityCoefficients 有参数:commonalityCoefficients(dataMatrix, dv, ivlist, imat=FALSE)dataMatrix 一个数据框,dvivlist 包含来自数据框的列标签的字符串。重要的是(我认为),它返回两个表,其中包含共性分析的结果。

我想我可以使用循环,但我真的很想使用 tidyverse 方法来做到这一点。我尝试了各种组合,例如使用split()dplyr::group_by() 对数据框进行子集化;并将该函数与purrr::map()purrr::walk() 系列函数一起应用,但我找不到有效的组合。

我想问题是每个函数调用都会返回两个表,并且捕获每个表不是微不足道的吗?非常感谢任何帮助。

【问题讨论】:

    标签: r dplyr tidyverse purrr


    【解决方案1】:

    这是一个整洁的方式:

    library(tidyverse)
    library(yhat)
    df <- data.frame(y = rnorm(50),
                     x1 = runif(50),
                     x2 = runif(50),
                     x3 = runif(50),
                     ff1 = gl(n = 5, k = 10, length = 50, labels = LETTERS[1:5]))
    
    ivlst <- as.list(setdiff(names(df), c("y", "ff1")))
    
    results <-
      df %>%
      group_by(ff1) %>%
      group_map( ~ commonalityCoefficients(., dv = "y", ivlist = ivlst))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多