如何在data.table中引用以数字开头的列名

时间:2013-03-26 12:30:11

标签: r data.table

如果data.table中的列名称采用number + character形式,例如:4PCS5Y等,那么如何将其引用为jx[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"

新列应为4PSC5Y的总和。

有没有办法如何在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逻辑能够理解它是列名。

2 个答案:

答案 0 :(得分:14)

我想,这就是你要找的,不确定。 data.tabledata.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