【问题标题】:Generate a new dataframe from a function in R从 R 中的函数生成新的数据框
【发布时间】:2021-12-23 09:05:44
【问题描述】:

我对 R 有点陌生,我正在尝试制作一个简单的函数,该函数将从 df 中的每个组中抽取 n 个观察值的样本:

df <- data.frame(var1=c(rnorm(50,50,10)),b=letters[1:2])

这个想法是用来自 eahc 组(a 或 b)的 n 个观察样本获得 2 个新的 df。

我试过了:

random_sample_groups <- function(aorb){
  df_out <- df %>%
    filter(group == "aorb") %>%
    sample_n(10)
}

我不知道如何告诉 R df_out 是数据帧...

您的帮助将不胜感激,谢谢!!

【问题讨论】:

    标签: r dataframe function


    【解决方案1】:

    dplyr 和 tidyverse 通常主要围绕交互式使用而构建,因此它们使用技术(例如“屏蔽”)来简化访问数据框中的列。以编程方式使用相同的功能可能需要一些额外的工作。

    在这里,我们可以通过使用“拥抱”或“卷曲”运算符{{ }} 指定的列来创建函数组,这使得函数可以访问存在于环境中的列名函数,并复制您通常期望从 dplyr 获得的相同类型的行为。

    这里有两篇有用的文章解释了更多的理论和必要性。

    https://dplyr.tidyverse.org/articles/programming.html

    https://rlang.r-lib.org/reference/topic-data-mask.html

    library(dplyr)
    random_sample_groups <- function(my_df, n, grouping){
      my_df %>%
        group_by( {{grouping}} ) %>%
        sample_n(n) %>%
        ungroup()
    }
    
    set.seed(42)
    random_sample_groups(df, 2, b)
    
    
    # A tibble: 4 × 2
       var1 b    
      <dbl> <chr>
    1  45.0 a    
    2  43.4 a    
    3  52.9 b    
    4  48.2 b    
    

    【讨论】:

    • 谢谢乔恩!这就是我想做的,但我想我错过了一些东西。我不断收到错误:必须按.data 中的变量分组。 * 未找到列 a。知道为什么吗?
    • 听起来您要求按列 a 对一些数据进行分组,但您应用它的数据没有列 a。没有更多细节很难知道。
    • 列名给了我这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多