I have a data.table as follows,
library(data.table)
dt<-structure(list(varx = c(0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L
), vary = c(0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L)), class = c("data.table",
"data.frame"), row.names = c(NA, -10L))
dt
varx vary
1: 0 0
2: 1 0
3: 0 0
4: 0 0
5: 1 1
6: 0 0
7: 1 1
8: 0 0
9: 0 0
10: 0 0
and I am trying to get the following output:
dt
varx vary
1: varx_n vary_n
2: varx_y vary_n
3: varx_n vary_n
4: varx_n vary_n
5: varx_y vary_y
6: varx_n vary_n
7: varx_y vary_y
8: varx_n vary_n
9: varx_n vary_n
10: varx_n vary_n
using the following code:
dt[,lapply(.SD, function(x){
ifelse(x==1,paste0(.SD,"_y"),paste0(.SD,"_n"))
})]
However, I am not getting the desired output. Please help.
Use Map and a bit of factor labelling to pair each variable name with the n/y label required.
dt[, Map(paste, names(dt), lapply(.SD,factor,labels=c("n","y")), sep="_")]
# varx vary
# 1: varx_n vary_n
# 2: varx_y vary_n
# 3: varx_n vary_n
# 4: varx_n vary_n
# 5: varx_y vary_y
# 6: varx_n vary_n
# 7: varx_y vary_y
# 8: varx_n vary_n
# 9: varx_n vary_n
#10: varx_n vary_n
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With