当前位置: 首页 > 知识库问答 >
问题:

当某些观测值少于n行时,用dplyr在数据Frame中每组随机采样n行

百里胜泫
2023-03-14
samples<-c("A","A","A","A","B","B")
groups<-c(1,1,1,2,1,1)
df<- data.frame(samples,groups)
df
  samples groups
1       A      1
2       A      1
3       A      1
4       A      2
5       B      1
6       B      1
  samples groups
1       A      1
2       A      1
3       A      2
4       B      1
5       B      1

共有1个答案

闾丘谦
2023-03-14

您可以对每个组的最小行数或x进行采样:

library(dplyr)

x <- 2
df %>% group_by(samples, groups) %>% sample_n(min(n(), x))

#  samples groups
#  <chr>    <dbl>
#1 A            1
#2 A            1
#3 A            2
#4 B            1
#5 B            1

但是,请注意,sample_n()已经为slice_sample添加了超级种子,但是n()不能用于slice_sample。这里有一个开放的问题。

但是,正如@tmfmnk提到的,我们不需要在这里调用n()。尝试:

df %>% group_by(samples, groups) %>% slice_sample(n = x)
 类似资料:
  • 问题内容: 有没有办法例如!每n秒打印一次?例如,程序将遍历我拥有的所有代码,然后经过5秒(带有),它将执行该代码。我将使用它来更新文件,但不打印Hello World。 例如: 问题答案:

  • 问题内容: 我正在努力寻找以下问题的最佳解决方案。假设我有一个像这样的表“ Table”: 我想为集合中的每个值选择:(’name1’,’name2’)10个随机唯一行。当然,可以像这样进行联合: 但是,如果我有100个唯一的名称,而我必须为其选择10个随机记录,则此查询将有点大。 提前非常感谢 问题答案: SQLFiddle演示

  • 目标是为每个组在数据帧中采样(不替换)不同数量的行。特定组要采样的行数在另一个数据帧中。 示例:idDF是要从中采样的数据帧。这些组由ID列表示。数据框planDF指定每个组要采样的行数,其中“datesToUse”表示行数,“ID”表示组。“totalDates”是该组的总行数,可能有用,也可能无用。 最终结果应包括从第一组(ID 1)中取样的3行、从第二组(ID 2)中取样的2行和从第三组(I

  • 问题内容: 我有大约1000行的表。我必须将n个随机行的表中的column(“ X”)更新为’Y’。为此,我可以有以下查询 是否有另一种有效的方式来编写此查询。该表没有索引。请帮忙? 问题答案: 我将使用ROWID: 我使用ROWID的实际原因并不是为了提高效率(它仍然会进行全表扫描)-如果列不是唯一的,则您的SQL可能不会更新所需的行数。 只有1000行,您不必担心效率(也许有一亿行)。该表上没

  • 问题内容: 在不从javascript中的数组进行替换的情况下,获取随机样本的一种干净方法是什么?所以假设有一个数组 我想随机采样5个唯一值;例如,生成一个长度为5的随机子集。要生成一个随机样本,可以执行以下操作: 但是,如果多次执行此操作,则可能会多次捕获同一项。 问题答案: 我建议使用Fisher-Yates混洗混洗数组的副本并进行切片: 请注意,这不是获取大型数组的随机小子集的最有效方法,因

  • 我想知道有没有人能帮我把一个较长的行分成几个较短的行,然后再把它们拆开? 在本例中,我有12列长的行,我希望将其分成更多的行和4列(请参阅stack_df)。 总体计划是按行合并()所有列,并将()突变为一列(9行x 1列,请参阅merge_df)。 之后,我希望将它们解压回一个大小为3行3列的数据帧(请参阅simple_df) 第3部分:解叠行(3行,3列)。(所需输出)