【发布时间】:2020-12-03 22:33:07
【问题描述】:
我从由单列组成的数据框中随机抽样而不进行替换。此列包含重复的数值。
我正在使用dplyr 来执行此操作。我需要从中采样的数据如下所示:
testSO <- data.frame(ToSample = c(round(runif(100, min=1, max=3),0)))
我使用下面的代码随机抽取 15 行:
MyRandomSample <- testSO %>%
slice_sample(n=15, replace = FALSE)
是否有直接的方法可以从testSO 中删除这 15 个样本中的每一个样本?实际上,slice_sample 正在幕后做这件事。我找不到创建行索引列表以便能够从testSO 中删除这些的方法。然后我会简单地删除与行索引匹配的行。
真实的testSO 数据有一些排序效果,因此我使用slice_sample 而不是slice_head。
我可以随机重新排序testSO,然后再重新排序slice_head。但是有没有一种既可以抽取样本又可以同时删除抽样行的方法?我找到了一个使用-sample 的基本 R 方法,它从数据框中删除行,但它不会将删除的行传递给另一个对象。
【问题讨论】:
-
有几种方法可以检索然后删除这些采样帧:(1) 如果每一行都有唯一标识符(或保证唯一匹配的列组合) ,那么你可以
anti_join在那个id上带有随机样本帧的原始帧; (2) 不能使用slice_sample,但可以mutate(use = row_number() %in% sample(n(), size=15))和filter(use)检索,然后用filter(!use)删除。