R образец, пока не будет выполнено условие - PullRequest
1 голос
/ 11 декабря 2019

Итак, у меня есть следующий фрейм данных:

structure(list(V1 = c(45L, 17L, 28L, 26L, 18L, 41L, 26L, 20L, 
23L, 31L, 48L, 23L, 32L, 18L, 30L, 11L, 26L)), .Names = "V1", row.names = c("24410", 
"26526", "26527", "43264", "63594", "125630", "148318", "245516", 
"269500", "293171", "301217", "400294", "401765", "520084", "545501", 
"564914", "742654"), class = "data.frame")

Имена строк представляют участки, а V1 показывает количество примеров на участок, из которых я могу извлечь. То, что я хочу, это взять образец из каждой посылки, пропорциональный количеству доступных примеров, где в итоге получается 400 образцов на посылку. Идея заключается в том, чтобы не пересматривать одну посылку по отношению к другим.

Набор данных, из которого происходит выборка, здесь .

Пока код выглядит так:

df <- read.csv('/data/samplefrom.csv')
df.training <- data.frame()
n <- 400

for(crop in sort(unique(df$code_surveyed))){
  for (bbch_stage in sort(unique(df$bbch))) {
    df.int <- df[df$bbch==bbch_stage & df$code_surveyed == crop,]
    df.int <- df.int[!is.na(df.int$name),]
    rawnum <- nrow(df[df$bbch==bbch_stage & df$code_surveyed == crop,])
    if(rawnum >= n){
      df.bbch.slected<-df[df$bbch==bbch_stage & df$code_surveyed == crop,]
      df.bbch.slected.sampled<-df.bbch.slected[sample(nrow(df.bbch.slected), n),] #(round(n_bbch*length(which(df$bbch==bbch_stage))))), ]
      df.training<-rbind(df.training,df.bbch.slected.sampled)
    }

  }
}

Что это делаетэто выборка 400 примеров в произвольном порядке для каждой комбинации «урожай + bbch_stage» (это следует понимать как составную переменную). Это все прекрасно, но я хочу иметь возможность контролировать, из какой посылки (переменная objectid) берутся примеры. По сути, дополнительный шаг фильтрации во время выборки.

Я пробовал несколько попыток с операторами while и repeat, а также с функцией stratified из devtools, но ни одна из них, похоже, не дает того, что мне нужно.

...