问题描述
如何从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)