根据每个因素的一组值分配 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"]
依此类推 listb
和 listd
.
它也没有用 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
(但应该包含)。
我有一个大数据 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"]
依此类推 listb
和 listd
.
它也没有用 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
(但应该包含)。