Имена дополнительных столбцов внизу data.table - PullRequest
0 голосов
/ 27 мая 2020

У меня проблема с функцией, проблема в том, когда я ее запускаю:

selectTrialAnimals <- function(data, nB, nZ, minWeight){
  buitenProef <- data[!is.na(Opm.)]
  tempBiggen <- data[is.na(Opm.)]

  tempBiggen <- tempBiggen[order(Sex,Speen_gew)]

  biggenB <- tempBiggen[Sex=="B"]
  biggenZ <- tempBiggen[Sex=="Z"]

  if (nrow(biggenB[Speen_gew >= minWeight]) >= nB){
    tempBuitenProefB <- biggenB[Speen_gew < minWeight ]
    biggenB <- biggenB[Speen_gew >= minWeight]  
  }else{
    tempBuitenProefB <- biggenB[1: (nrow(biggenB) - nB)]
    biggenB <- biggenB[(nrow(biggenB) - nB + 1):nrow(biggenB)]  
  }

  if (nrow(biggenZ[Speen_gew >= minWeight]) >= nZ){
    tempBuitenProefZ <- biggenZ[Speen_gew < minWeight ]
    biggenZ <- biggenZ[Speen_gew >= minWeight]  
  }else{
    tempBuitenProefZ <- biggenZ[1: (nrow(biggenZ) - nZ)]
    biggenZ <- biggenZ[(nrow(biggenZ) - nZ + 1):nrow(biggenZ)]  
  }

  while (nrow(biggenB) > nB| nrow(biggenZ) > nZ){
    if (nrow(biggenB) > nB){
      if (biggenB[,mean(Speen_gew)] > (biggenZ[,mean(Speen_gew)])){
        tempBuitenProefB <- rbind(tempBuitenProefB,biggenB[nrow(biggenB)])
        biggenB <- biggenB[-nrow(biggenB)]
      }
      if (biggenB[,mean(Speen_gew)] < (biggenZ[,mean(Speen_gew)])){
        tempBuitenProefB <- rbind(tempBuitenProefB,biggenB[1])
        biggenB <- biggenB[-1]      
      }
    }

    if (nrow(biggenZ) > nZ){
      if (biggenZ[,mean(Speen_gew)] > (biggenB[,mean(Speen_gew)])){
        tempBuitenProefZ <- rbind(tempBuitenProefZ,biggenZ[nrow(biggenZ)])
        biggenZ <- biggenZ[-nrow(biggenZ)]
      }
      if (biggenZ[,mean(Speen_gew)] < (biggenB[,mean(Speen_gew)])){
        tempBuitenProefZ <- rbind(tempBuitenProefZ,biggenZ[1])
        biggenZ <- biggenZ[-1]      
      }
    }
  }

  tempBuitenProef <- rbindlist(list(buitenProef,tempBuitenProefB, tempBuitenProefZ))
  tempBuitenProef <- tempBuitenProef[order(Sex,Speen_gew)]
  tempBiggen <- rbind(biggenB, biggenZ)

  return(list(AnimalsInTrial = tempBiggen, AnimalsOutTrial = tempBuitenProef))
}

Он добавляет дополнительный набор имен столбцов в конец возвращаемой таблицы data.table. Примерно так (показана только часть результата):

$AnimalsOutTrial
    Sex Oornr    Geb_dat Zeugnr  Beer Geb_gew Speen_gew oud K.H.       Opm.
 1:   B 84001 2020-04-24 18/114 WESLY     0.7       2.2  26   25      breuk
 2:   B 83974 2020-04-23  17/67 WESLY     1.3       3.2  27   24       <NA>
 .....
37:   Z 84081 2020-04-25 18/120 WESLY     0.9       5.3  25   30       <NA>
38:   Z 84085 2020-04-25 18/120 WESLY     1.2       7.0  25   30 dikke poot
    Sex Oornr    Geb_dat Zeugnr  Beer Geb_gew Speen_gew oud K.H.       Opm.

Проблема в том, что я не могу воспроизвести его с тестовыми данными:

test <- data.table(Sex=c("B","B","Z","Z","B","B","Z","Z"),Opm.=c(NA,"x",NA,NA,"x",NA,NA,NA),Speen_gew=c(1,2,3,5,2,8,7,9))

Это выполняется, как ожидалось, на входе. Я не могу предоставить полные исходные данные, поскольку они конфиденциальны. Кто-нибудь сталкивался с таким поведением раньше и как я могу с этим справиться? Заранее спасибо!

...