나는이 쿼리에 대한 해결책을 찾고 커뮤니티가 영감을 줄 수 있기를 바란다. data.table의 조건부 크기 샘플
나는 다음과 같이 큰 data.table가 표시 고객 활동 정보로 구성된이 있습니다library(data.table)
library(dplyr)
DF = as.data.table(NULL)
cust_index = as.data.table(seq(1000,10000,3)) # list of unique customers
colnames(cust_index) = "cust_id"
# create a list of all customer activity - each cust_id represents an active event
for (cust in cust_index$cust_id){
each_cust = as.data.table(rep(cust, sample(1:17,1, replace=FALSE)))
DF = bind_rows(DF, each_cust)
}
rm(each_cust)
colnames(DF) = "cust_id"
setkey(DF, cust_id)
# add dummy data for activity
DF[, A:= sample(x = c(0,1), size = nrow(DF), replace = TRUE)]
DF[, B:= sample(x = c(0,1), size = nrow(DF), replace = TRUE)]
DF[, C:= sample(x = c(0,1), size = nrow(DF), replace = TRUE)]
내가 DF 4 개 고객 관측의 최대 샘플링합니다.
sample.cust = function(x){
if (nrow(x)<4) {
cust_sample = x
} else {
cust_sample = x[sample(1:4,replace=FALSE)]
}
return(cust_sample)
}
.. for 루프 내에서 호출됩니다
은 지금까지 나는 어떤 샘플 단일 고객에 대한 관찰 상대적 기능을 사용하고 있습니다.
for (cust in cust_index$cust_id){
cust.sample = train.data[.(cust), sample.cust(.SD)]
train.sample = bind_rows(train.sample, cust.sample)
}
.. 그러나 위의 루프는 절대로 종료되지 않습니다.
저는 모든 것을 시도해 보았습니다 : = 지금까지는 성공하지 못했던 조합을 설정했습니다. 모든 제안은 내가 상상하는 것이 다소 사소한 해결책 일 것이라고 대단히 감사하게 생각할 것입니다.
많은 감사, M.
dplyr 패키지가 추가 된 –