How to reference column names that start with a number, in data.table
data.table, r
Solution
I think, this is what you're looking for, not sure. `data.table` is different from `data.frame`. Please have a look at the quick introduction, and then the FAQ (and also the reference manual if necessary).
require(data.table)
dt <- data.table("4PCS" = 1:3, y=3:1)
# 4PCS y
# 1: 1 3
# 2: 2 2
# 3: 3 1
# access column 4PCS
dt[, "4PCS"]
# returns a data.table
# 4PCS
# 1: 1
# 2: 2
# 3: 3
# to access multiple columns by name
dt[, c("4PCS", "y")]
Alternatively, if you need to access the column and not result in a `data.table`, rather a vector, then you can access using the `$` notation:
dt$`4PCS` # notice the ` because the variable begins with a number
# [1] 1 2 3
# alternatively, as mnel mentioned under comments:
dt[, `4PCS`]
# [1] 1 2 3
Or if you know the column number you can access using `[[.]]` as follows:
dt[[1]] # 4PCS is the first column here
# [1] 1 2 3
Edit:
Thanks @joran. I think you're looking for this:
dt[, `4PCS` + y]
# [1] 4 4 4
Fundamentally the issue is that `4CPS` is not a valid variable name in R (try `4CPS <- 1`, you'll get the same "Unexpected symbol" error). So to refer to it, we have to use backticks (compare``4CPS` <- 1`)
Problem
If the column names in `data.table` are in the form of `number + character`, for example: `4PCS`, `5Y` etc, how could this be referenced as `j` in `x[i,j]` so that it is interpreted as an unquoted column name. I assume this would solve mine original problem. I wanted to add several column in 'data.table' which were in the form `number + character`. ``` M <- data.table('4PCS'=1:4,'5Y'=4:1,X5Y=2:5) > M[,4PCS+5Y] Error: unexpected symbol in "M[,4PCS" ``` The new column should be a sum of `4PSC` and `5Y`. Is there a way how to refer to them in `data.table` in no quoted form? If these columns are referred in `data.table` with the quoted "logic" of `data.frame` : ``` > M[,'5Y',with=FALSE] 5Y [1,] 4 [2,] 3 [3,] 2 [4,] 1 ``` then there will be a limitation in functionality of such reference. The addition would not work as it does not work in `data.frame`: ``` > M[,'4PCS'+'5Y',with=FALSE] Error in "4PCS" + "5Y" : non-numeric argument to binary operator ``` The `data.table` functionality would allow to operate over the columns. I would like to find a solution in the new `data.table` logic hence I can use its ability to transform the columns by column name referencing. The question is: How to quote the column name which start with number so that the data.table logic would understand that it is a column name.