2014-02-19 83 views
1

根據「關於R中data.table包的常見問題」,可以通過DT [0]創建一個表的模板(如果有data.table DT)。但是,當我嘗試爲列分配一些值時,它不允許我這樣做。這是我嘗試過的。如何將值賦給零對象data.table? R

Binary.Table = matrix(0, nrow = 7, ncol = 26) 
Binary.Table = data.table(Binary.Table) 
setnames(Binary.Table, names(Binary.Table), c('JustDay', letters[1:25])) 
Binary.Table[, JustDay := c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")] 

我需要使用此表作爲我的新表的模板。所以,我這樣做

DT.New <- Binary.Table[0] 

現在,我的DT.New是一個零obs data.table。然後,我想將日期分配給'JustDay'(或另一個)列。我用

DT.New[, JustDay := c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")] 

但它不以我需要的方式工作。我的代碼中是否有任何錯誤?和如何做到這一點?謝謝。

回答

0

我有這樣的感覺,即以相同的方式將數據行添加到數據表是非常棘手的。你可以做這樣的事情來得到它的工作:

DT.template <- Binary.Table[0] 
setkey(DT.template,JustDay) 
DT.New <- DT.template[J(c("Monday", "Tuesday", "Wednesday", 
          "Thursday", "Friday", "Saturday", "Sunday")),] 

如果鍵列是不是你的模板的第一列,這將是DT.New的第一列。爲了保存列的順序,你可以做到以下幾點:

numNewLines <- 7 # e.g. number of weekdays 

setkeyv(DT.template,colnames(DT.template)[1]) 
createKey <- rep(new(typeof(DT.template[[1]]),NA),numNewLines) 
DT.New <- DT.template[J(createKey),] 

一旦創建行的必要量,你可以對它們再次以通常的方式進行操作,例如

DT.New[,JustDay:=c("Monday", "Tuesday", "Wednesday", 
        "Thursday", "Friday", "Saturday", "Sunday")] 
+0

非常感謝。我必須學習更多關於J()和另一個函數。 – Phongsakorn

1

我看你已經接受了答案,但無論如何...我會做這樣的:

ct <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") 
setkey(DT.New, JustDay) # need to set the key before using i on the next line 
DT.New[.(ct), nomatch=NA] 
    JustDay a b c d e f g h i j k l m n o p q r s t u v w x y 
1: Monday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
2: Tuesday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
3: Wednesday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
4: Thursday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
5: Friday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
6: Saturday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
7: Sunday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

:=旨在通過參考更改值,所以你需要確保有一些參考(因此nomatch=NA選項;這是默認的,但我已經包括它爲清楚起見)。