如果data.table
中的列名称采用number + character
形式,例如:4PCS
,5Y
等,那么如何将其引用为j
在x[i,j]
中,以便将其解释为不带引号的列名。
我认为这会解决我原来的问题。我想在'data.table'中添加几个列,其格式为number + character
。
M <- data.table('4PCS'=1:4,'5Y'=4:1,X5Y=2:5)
> M[,4PCS+5Y]
Error: unexpected symbol in "M[,4PCS"
新列应为4PSC
和5Y
的总和。
有没有办法如何在data.table
中引用它们而没有引用形式?如果这些列在data.table
中引用data.frame
引用的“逻辑”:
> M[,'5Y',with=FALSE]
5Y
[1,] 4
[2,] 3
[3,] 2
[4,] 1
然后这种参考的功能将受到限制。添加不起作用,因为它在data.frame
中不起作用:
> M[,'4PCS'+'5Y',with=FALSE]
Error in "4PCS" + "5Y" : non-numeric argument to binary operator
data.table
功能允许对列进行操作。我想在新的data.table
逻辑中找到一个解决方案,因此我可以使用它通过列名称引用来转换列的能力。
问题是:
如何引用以数字开头的列名,以便data.table逻辑能够理解它是列名。
答案 0 :(得分:14)
我想,这就是你要找的,不确定。 data.table
与data.frame
的不同。请查看quick introduction,然后查看FAQ(如果需要,还可以查看参考手册)。
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", with = FALSE] # notice the with=FALSE
# returns a data.table
# 4PCS
# 1: 1
# 2: 2
# 3: 3
# to access multiple columns by name
dt[, c("4PCS", "y"), with = FALSE]
或者,如果您需要访问该列而不会产生data.table
,而不是矢量,那么您可以使用$
表示法进行访问:
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
或者如果您知道可以使用[[.]]
访问的列号,如下所示:
dt[[1]] # 4PCS is the first column here
# [1] 1 2 3
修改强>
谢谢@joran。我想你正在寻找这个:
dt[, `4PCS` + y]
# [1] 4 4 4
答案 1 :(得分:0)
您还可以在要调用的变量名称之前放置一个“ X”,以使R识别为名称,而不必将数字和字符串视为不同(因此语法错误)
例如调用4PCS时,请使用X4PCS
如
mydata <-X4PCS