在data.table中使用函数的reutrn结果创建列

在data.table中使用函数的reutrn结果创建列,r,data.table,R,Data.table,我试图创建一个随机整数的列,该整数介于1和不同列的唯一值的长度之间 换句话说,这是一种从该列可能具有的所有唯一值的样本中随机重新分配每行的类别的方法 这是我的。不幸的是,它返回的正是我输入的内容 randomBinAssigner <- function(testingDT) { levelsInCat <- levels(testingDT$randomCat) testingDT[, randomCatKey := sample(1:length(levelsInCat)

我试图创建一个随机整数的列,该整数介于1和不同列的唯一值的长度之间

换句话说,这是一种从该列可能具有的所有唯一值的样本中随机重新分配每行的类别的方法

这是我的。不幸的是,它返回的正是我输入的内容

randomBinAssigner <- function(testingDT) {
  levelsInCat <- levels(testingDT$randomCat)
  testingDT[, randomCatKey := sample(1:length(levelsInCat), 1, replace = T)]
  testingDT[, randomCat := levelsInCat[randomCatKey]]
  testingDT[, randomCatKey := NULL]
  return(testingDT)
}

randomBinAssignerOP中没有可复制的示例具有清晰的期望输出,但我猜您只是缺少了一个“by”:


我不是data.table专家,但您首先使用示例值创建列
randomCatKey
,然后将
randomCatKey
设置为
NULL
,我相信这基本上将再次删除该列,这似乎有点可疑。如果你把它去掉怎么办?(只是在黑暗中拍摄…)我正在创建和删除该列,并在这段时间内使用它。我会让代码更简洁,但为了提问,我认为这会让问题更清楚。好的,明白了。顺便说一句,我认为您可以删除额外的步骤,直接使用类似于
sample(levelsInCat,1,T)
的方法,甚至可以在前面删除该步骤,然后编写
sample(levels(testingDT$randomCat),1,T)
好的调用。我对R比较陌生。谢谢!
testingDT[, randomCatKey := sample(length(levelsInCat), 1, T), by = randomCat]