根据每个因素的一组值分配 id/factor/categories

Allocating id/factor/categories based on a group of values for each factor

我有一个大数据 table 如下所示:

id var1 var2
1   1   a
2   2   d
3   6   d
4   4   b
5   6   d
6   8   a

我需要根据 var1 中的值在 var2 中分配一个类别。对于每个类别中包含的 var1 个值,类别不遵循任何顺序。例如:

lista <- c(1,5,7)
listb <- c(4,9)
listd <- c(2,6)

我试过两种方法都不成功。 使用 which 函数:

which: DT[which(var1 %in% lista), var2 := "a"] 依此类推 listblistd.

它也没有用 function approach(这对于我的大数据 table 来说也可能太慢了,因为它会有很多 elseif 子句)。我写道:

matchfun <- function(value){
  if (var1 %in% lista){
    value <- as.character(a)} else {
    return(value)}}

非常欢迎任何关于如何将 factor/categories 分配给值组的想法或评论。

我建议在这里合并。让 DT 成为您的原始数据 table。

DT <- data.table(id=1:6,var1=c(1,2,6,4,6,8))

首先,您需要将映射存储在 table:

matchDT <- rbindlist(list( 
  data.table(var1=lista,var2="a"),
  data.table(var1=listb,var2="b"),
  data.table(var1=listd,var2="d")
))

然后就可以合并了,之后可以选择设置id作为key来恢复原来的排序。

setkey(DT,var1)
DT[matchDT,var2:=var2,nomatch=FALSE]
setkey(DT,id)

结果是

   id var1 var2
1:  1    1    a
2:  2    2    d
3:  3    6    d
4:  4    4    b
5:  5    6    d
6:  6    8   NA

最后一个值为 NA,因为您的 lista 对象不包含 8(但应该包含)。