I have the following data.table
in R
dt <- data.table(gender = c("Male", "Female"), Prop = c(0.49, 0.51))
# gender Prop
# 1: Male 0.49
# 2: Female 0.51
I want to calculate a Freq = Prop * 1000
column and then return just the gender
and Freq
columns. How can I do this in a single line of code and without explicitly referring to the gender
column and without modifying dt
?
The best I can manage is:
onsdist$gender[, c(.SD, Freq = Prop * 1000)][, .SD, .SDcols = - "Prop"]
# gender Freq1 Freq2
# 1: Male 490 490
# 2: Female 510 510
but I've ended up with a duplicated Freq
column.
(The reason I don't want to refer to gender
is because it changes across data.table
s. The reason I don't want to modify dt
is because I need to re-use the original version later).
CodePudding user response:
Use transform with Prop = NULL
dt[, transform(.SD, Freq = Prop * 1000, Prop = NULL)]
## gender Freq
## 1: Male 490
## 2: Female 510
or this variation
transform(dt, Freq = Prop * 1000, Prop = NULL)
## gender Freq
## 1: Male 490
## 2: Female 510
CodePudding user response:
We can use the data.table
syntax to get the output format
dt[, c(.SD, .(Freq = Prop * 1000)), .SDcols = -"Prop"]
-output
gender Freq
1: Male 490
2: Female 510