2016-08-17 67 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