【问题标题】:Efficient way to add sample information as new column to data set将样本信息作为新列添加到数据集的有效方法
【发布时间】:2021-09-02 22:45:27
【问题描述】:

我知道如何通过对某些行进行采样来对数据框进行子集化。但是,我正在努力寻找一种简单(最好是 tidyverse)的方法来将采样信息作为新列添加到我的数据集中,即我只想用“1”填充一个新列,如果它被采样和“0” " 如果不是。

我目前有这个,但感觉过于复杂。请注意,在示例中,我想每组采样 3 行。

df <- data.frame(group = c(1,2,1,2,1,1,1,1,2,2,2,2,2,1,1),
                 var   = 1:15)

library(tidyverse)

df <- df %>%
  group_by(group) %>%
  mutate(sampling_info = sample.int(n(), size = n(), replace = FALSE),
         sampling_info = if_else(sampling_info <= 3, 1, 0))

【问题讨论】:

    标签: r random tidyverse


    【解决方案1】:

    你可以试试-

    library(dplyr)
    
    set.seed(123)
    
    df %>%
      arrange(group) %>%
      group_by(group) %>%
      mutate(sampling_info = as.integer(row_number() %in% sample(n(), size = 3))) %>%
      ungroup
             
    #   group   var sampling_info
    #   <dbl> <int>         <int>
    # 1     1     1             0
    # 2     1     3             0
    # 3     1     5             1
    # 4     1     6             0
    # 5     1     7             0
    # 6     1     8             0
    # 7     1    14             1
    # 8     1    15             1
    # 9     2     2             0
    #10     2     4             1
    #11     2     9             1
    #12     2    10             0
    #13     2    11             0
    #14     2    12             1
    #15     2    13             0
    

    sample(n(), size = 3) 将为每个 group 生成 3 个随机行号,我们为这些行号分配 1。

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 2021-11-08
      • 2018-09-11
      • 1970-01-01
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2016-08-24
      相关资源
      最近更新 更多