如何在R中按列从数据表中有效采样?

问题描述

如何从R中的数据表中为列中的每个唯一变量有效地采样一行?例如,给定data.table:

    for i in Trucks:
        for k in Companies:
            for b in Blocks:
                for s in Slots:
                    if 0 <= s < 23:
                        cont_9=m.addConstr(X[i,k,b,math.ceil(s+tp[s]+twg[s])]+Y[i,math.ceil(s+tp[s]+twg[s])] <= Z[i,s])

我需要为A列中的每个唯一字符采样一行。例如:

library(data.table)
set.seed(1)

dt <- data.table( 
                   A = sample(c("A","B","C","D","E"),100,replace = T),B = sample(1:100,C = sample(101:200,replace = T) 
                 )

但是,我要应用的数据表相差很大。有没有可以用来提高性能的data.table方法

解决方法

您可以为每个组在sample上使用.N并选择1个随机行。

library(data.table)
set.seed(123)
dt[,.SD[sample(.N,1)],A]

#   A   B   C
#1: A  31 143
#2: D  16 175
#3: B 100 165
#4: E  27 190
#5: C  90 197

dplyr具有slice_sample(以前是sample_n)功能:

library(dplyr)
dt %>% group_by(A) %>% slice_sample(n = 1)