【问题标题】:Random sampling R随机抽样 R
【发布时间】:2021-03-25 14:22:16
【问题描述】:

我是 R 新手,并试图利用一个相当简单的任务。我有一个由 20 个 obs 和 19 个变量组成的数据集,我想生成三个不重叠的 5 个 obs 组。我正在使用 dplyr 包中的 slice_sample 函数,但我如何重申排除已在第一轮中获得的 obs?

图书馆(“dplyr”) set.seed(123)

NF_1

【问题讨论】:

  • 请编辑您的问题以包含dput(NF)

标签: r grouping sampling


【解决方案1】:

您可以使用基础 R 中的 sample 函数。

您所要做的就是使用replace = FALSE 对行进行采样,这意味着您不会有任何重叠。您还可以定义样本数。

n_groups <- 3
observations_per_group <- 5
size <- n_groups * obersavations_per_group
selected_samples <- sample(seq_len(nrow(NF)), size = size, replace = FALSE)

# Now index those selected rows
NF_1 <- NF[selected_samples, ]

现在,根据您的评论,如果您想生成 N 个数据帧,每个数据帧都有多个样本并相应地标记它们,您可以使用lapply(这是一个将函数“应用”到集合的函数值)。 “lapply”中的“l”表示它返回一个列表。还有其他类型的apply 函数。您可以阅读更多相关信息(我强烈建议您这样做!)here

这段代码应该可以解决你的问题,或者至少给你一个好主意或去哪里。

n_groups <- 3
observations_per_group <- 5
size <- observations_per_group * n_groups

# First we'll get the row samples.
selected_samples <- sample(
    seq_len(nrow(NF)),
    size = size,
    replace = FALSE
)

# Now we split them between the number of groups
split_samples <- split(
    selected_samples,
    rep(1:n_groups, observations_per_group)
)

# For each group (1 to n_groups) we'll define a dataframe with samples
# and store them sequentially in a list.

my_dataframes <- lapply(1:n_groups, function(x) {
    # our subset df will be the original df with the list of samples
    # for group at position "x" (1, 2, 3.., n_groups)
    subset_df <- NF[split_samples[x], ]
    return(subset_df)
})

# now, if you need to access the results, you can simply do:
first_df <- my_dataframes[[1]] # use double brackets to access list elements

【讨论】:

  • 好的,我现在如何从 NF_1 获取 5 个不同的数据帧?我可以为使用示例函数生成的组添加名称或编号吗?
  • 当然,您可以通过使用循环结构来做到这一点。使用 lapply 会为每次迭代返回一个列表。您可以循环n_groups 次并每次生成一个 size = 5 的样本。然后根据需要标记样本。如果您需要我更新答案,请告诉我。
  • 是的,因为我以前从未使用过 lapply 函数,我尝试过但在语法上失败了......对不起,但我是一个非常非常非常初级的水平......
  • 我已经相应地编辑了我的答案。我强烈建议您查看adv-r.hadley.nz 以进一步了解 R 语言!另外,如果我的回答对你有帮助,请点赞并采纳。如果您需要更多帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多