首页 > 解决方案 > data.table 底部的额外列名

问题描述

我有一个函数问题,问题是当我运行它时:

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))

这按预期作为输入运行。我不能提供完整的原始数据,因为它是机密的。以前有没有人遇到过这种行为,我该如何处理?提前致谢!

标签: rdata.tablerbind

解决方案


推荐阅读