2016-11-22 49 views
0

我構建了一列向量(dt.commod),它有一些我想要更改的值(c("-", "...", "0 0"))爲0.我認爲以下代碼的一些變化會起作用(prodYears[j],get(prodYears[j]))但他們都沒有。r動態名稱在i中的數據表問題

dt.commod <- data.table::as.data.table(openxlsx::read.xlsx(filePath, colNames = TRUE, cols = NULL, 
                  sheet = commodName)) 
    prodYears <- c("prod_qty_2011", "prod_qty_2012", "prod_qty_2013") 
    for (j in 1:length(prodYears)) { 
    dt.commod[get(prodYears[j]) %in% c("-", "...", "0 0"), prodYears[j] := "0" ] 
    } 

相反,如果我直接運行的列名,如

dt.commod[prod_qty_2011 %in% c("-", "...", "0 0"), prod_qty_2011 := "0"] 

它做什麼,它應該。

+1

奇數。可以幫助看到一個可重複的例子。我可以用'for(col in cols)DT [。(vals),on = col,(col):=「0」]來實現, – Frank

回答

0

對相關問題做更多的瀏覽之後,我就在for循環之前加入

data.table::setkeyv(dt.commod, prodYears) 

。我不明白爲什麼這個工作,但它確實。