【问题标题】:Using group_by and slice with external parameters使用带有外部参数的 group_by 和 slice
【发布时间】:2020-11-17 04:28:52
【问题描述】:

我有一个类似于

的数据框
df <- data.frame(region=c("north","north","south","north","south","south"),
                 status=c("open","closed","closed","open","open","open"))

一个变量samplesize &lt;- 2(另一个df中的一个变量,称为dataSamples)和另一个变量stratifyOn &lt;- "region"

我想按之前由 stratifyOn 函数设置的内容进行分组,以便我获得每个区域的 2 个主要集(样本大小)和 1 个辅助集。

我尝试的是

primarySamples <- df %>% group_by(stratifyOn) %>% 
                         slice_head(n=dataSamples$samplesize)

我遇到的第一个错误是错误:必须按.data 中的变量分组。 * 未找到列strstratifyOn

第二个错误是错误:n 必须是单个数字。因为 dataSamples 对每个区域观察都有一个样本大小。

是否可以(如果可以,如何)使用这些外部值,还是有更好的方法?

dataSamples 的精简版是

dataSamples &lt;- data.frame(region=c("north","south"), samplesize=c(2, 1))

实际df中还有其他几个变量和观察值。样本量的值取决于用户决定分层的区域。

【问题讨论】:

    标签: r group-by dplyr slice


    【解决方案1】:

    您可以使用.dots 的参数group_by 来解决您的第一个问题。您的第二个问题可能很简单,只是对datasamples$samplesize 进行子集化,但您没有提供该问题的可重现示例,所以我不确定。

    df <- data.frame(
      region = c("north", "north", "south", "north", "south", "south"),
      status = c("open", "closed", "closed", "open", "open", "open")
    )
    
    stratifyOn <- "region"
    
    datasamples <-data.frame(samplesize = c(2, 1, 10))
    
    df %>% group_by(.dots = stratifyOn) %>% slice_head(n = datasamples$samplesize[1])
    # A tibble: 4 x 2
    # Groups:   region [2]
      region status
      <chr>  <chr> 
    1 north  open  
    2 north  closed
    3 south  closed
    4 south  open  
    

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 2023-03-22
      • 2012-07-02
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多