从数据表中,每组随机选择一行

Ker*_*rry 6 r subset random-sample data.table

我正在寻找一种从数据表中选择行的有效方法,这样我就可以为特定列中的每个唯一值设置一个代表性行.

我举一个简单的例子:

require(data.table)

y = c('a','b','c','d','e','f','g','h')
x = sample(2:10,8,replace = TRUE)
z = rep(y,x)
dt = as.data.table( z )
Run Code Online (Sandbox Code Playgroud)

我的目标是通过对列z中的每个字母ah采样一行来对数据表dt进行子集化.

akr*_*run 9

OP在示例中仅提供了一列.假设原始数据集中有多个列,我们按"z" sample分组,每组的行序列中有1行,获取行索引(.I),使用行索引()提取列$V1并使用它来分组'dt'的行.

dt[dt[ , .I[sample(.N,1)] , by = z]$V1]
Run Code Online (Sandbox Code Playgroud)

  • 这太完美了,正是我一直在寻找的。是的,假设有多个列,我的问题数据表有 200 多个列,但为了清晰和易于理解(就我而言),我保持示例简单。 (2认同)

bra*_*ayl 6

您可以使用 dplyr

library(dplyr)

dt %>%
  group_by(z) %%
  sample_n(1)
Run Code Online (Sandbox Code Playgroud)

  • 请提供一些解释,说明为什么您的提案可以解决OP的问题。 (4认同)