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


i have large data table following:

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

i need assign category in var2 based on values in var1. categories not follow order respect var1 values included in each category. instance:

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

i have tried 2 approaches unsuccessfully. using which function:

which: dt[which(var1 %in% lista), var2 := "a"] , on listb , listd.

it didn't work function approach (which may slow large data table have many elseif clauses). wrote:

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

any idea or comment on how allocate factor/categories group of values welcome.

i'd suggest merge here. let dt original data table.

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

first, need store mapping in table:

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

then can merge, optionally setting id key afterward restore original sorting.

setkey(dt,var1) dt[matchdt,var2:=var2,nomatch=false] setkey(dt,id) 

the result is

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

the last value na because lista object doesn't contain 8 (but should).


Comments

Popular posts from this blog

tcpdump - How to check if server received packet (acknowledged) -