2017-09-09 93 views
0

我正在處理一個包含X和Y列的data.table,並且我想創建一個新的列Z,它是所有記錄的數目(X,Y)的相同值。在多個列中創建data.table中的一個新列

我知道的語法與data.frame工作時:

ddply(df,.(X,Y),nrow) 

我測試了不同的語法我在這個論壇上找到,但他們沒有工作:

dt[, Z := lapply(.SD,nrow), by="X,Y"] # or 
dt[, `:=`(Z = lapply(.SD,nrow)), by="X,Y"] 

我精確的X和Y是數字。

回答

4

library(data.table) 
dt <- data.table(X = c(1, 1, 2), Y = c(1, 1, 2)) 

啓動相應的語法是

dt[, Z := .N, by = c("X","Y")] 

dt[, Z := .N, by = .(X,Y)] 
+0

我得到的錯誤\'[.data.table \'(DT,\' := \'(Z,.N),:: RHS類型('integer')必須與LHS('list')匹配。檢查和脅迫會對性能影響太大,改變目標列的類型,或強制:=你自己的RHS(例如,通過使用1L而不是1)錯誤消息 – Dan82

+0

您已經有一個名爲Z的列,其數據類型不同。如果你不需要它,首先使用'dt [,Z:= NULL]'去除Z. – 67342343

+0

你是對的,非常感謝 – Dan82

相關問題