2016-08-17 77 views
1

使用set()提高效率以更新data.table中的值當列的順序發生更改時,我遇到了問題。所以爲了防止我使用一種解決方法來匹配列名而不是列位置。 我想知道是否有更好的方法來解決設置查詢的j部分中的列。data.table中的set() - 匹配名稱而不是列號

DT <- as.data.table(cbind(Period = 1:10, 
           Col.Name=NA)) 

set(DT, i = 1L , j = as.integer(match("Col.Name",names(DT))), value = 0) 
set(DT, i = 3L , j = 2L, value = 0) 

所以我想問一下,是否有一個data.table的解決方法,或許可以快速匹配已存在的colnames。

回答

1

我們可以直接在「J」

set(DT, i = 1L , j = "Col.Name", value = 0) 
DT 
# Period Col.Name 
# 1:  1  0 
# 2:  2  NA 
# 3:  3  NA 
# 4:  4  NA 
# 5:  5  NA 
# 6:  6  NA 
# 7:  7  NA 
# 8:  8  NA 
# 9:  9  NA 
#10:  10  NA 
+1

雖然兩種方法之間的差異使用列名不符合一個快速的微基準真的noticable()。可能是因爲它們在內部幾乎相同,當然代碼的可讀性大大增強。 – hannes101