2014-12-05 36 views
2

基本上,我想用data.table寫以下dplyr代碼:一列到data.table添加具有更少的行大於列長度

library(dplyr) 
set.seed(1) 
df <- data.frame(a = 2:3) 
(df2 <- group_by(df, a) %>% 
    do({b <- runif(as.numeric(.[1, 1])) 
     data.frame(b, c = rep(sum(b), nrow(.)))})) 

隨着data.table,所述by參數摺疊的結果到單個每組的行,我不知道如何在簡潔的代碼中避免這個參數。

library(data.table) 
set.seed(1) 
dt <- data.table(a = 2:3) 
(dt[ , b := runif(as.numeric(.SD[1, 1])), by = a]) 
(dt[ , c := sum(b), by = a]) 
+3

'dt [,{b = runif(a);列表(b = b,c = sum(b))},by = a]' – Arun 2014-12-05 15:42:29

回答

1

您可以在方括號中的第二個參數中使用list()。

library(data.table) 
set.seed(1) 
dt <- data.table(a = 2:3) 
(dt <- dt[ , list(b = runif(as.numeric(a))), by = a]) 
(dt[ , c := sum(b), by = a]) 
相關問題