If I want to recode a variable in R using data.table
, what is the syntax? I saw some ans but didn\'t find them appropriate.
e.g. if I have the variable cal
You can do it this way
library(data.table)
trips <- data.table(Name=c('John','Tina','Dave','Casper'),gender=c(1,2,1,0))
trips[,gender:= ifelse(gender == 0 , "Unknown",
ifelse(gender == 1 , "Male",
"Female" ))]
Two problems in your code:
:=
which is the assigning symbol for a column in data.tableifelse
, so you need another ifelse
for the third case: if gender is not 0 then you need to test if gender is 1 to separate the Male and Female casesPut the rules in a table and do an update join:
gmap = data.table(old = 0:2, new = c("Unknown", "Male", "Female"))
trips[, Gender := gmap[copy(.SD), on=.(old = Gender), x.new]]
Name Gender
1: John Male
2: Tina Female
3: Dave Female
4: Casper Unknown
Once you have a data.table then it would be most efficient to use a vectorized translation strategy. The match
function provides a method of creating a "selection vector" for a choosing a item from a set of character possibilities:
library(data.table)
setDT(trips) # create a data.table from a dataframe
trips[ , Gender := c("Unknown", "male", "Female")[match(Gender, c(0,1,2))] ]
#-------------------
> trips
Name Gender
1: John male
2: Tina Female
3: Dave Female
4: Casper Unknown
For this specific case, a simpler solution could be (ht to @Chinsoon):
trips[, gender := c("Unknown", "Male", "Female")[gender + 1L] ]