2013-03-26 35 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

相關問題