首页 > 解决方案 > 将样本信息作为新列添加到数据集的有效方法

问题描述

我知道如何通过对某些行进行采样来对数据框进行子集化。但是,我正在努力寻找一种简单(最好是 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))

标签: rrandomtidyverse

解决方案


你可以试试 -

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)将为每个生成 3 个随机行号group,我们为这些行号分配 1。


推荐阅读