2013-03-26 53 views
7

如果data.table列名在number + character的形式,例如:4PCS5Y等,怎么会这样为jx[i,j]引用它,这样它被解释为一个没有引号的列名。如何引用以数字开头的列名,在data.table

我认为这会解决我原来的问题。我想在'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.tabledata.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逻辑会明白,这是一个列名的列名。

+1

感谢您的建议 – user2210954 2013-03-28 00:29:03

回答

11

我想,这就是你要找的东西,不确定。 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 
+5

不要忘了''DT ['4PCS']''(回滴答'4PCS',因为你通常会做以外的数据。表 – mnel 2013-03-26 13:16:32

+0

然后明确指出列名不应以数字开头 – user2210954 2013-03-26 19:25:03

相关问题