2014-12-05 27 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]) 
相关问题