假设我有数据
set.seed(42)
dat <- data.table(id=1:10,x=rnorm(10),group=rep(1:2,each=5), gc=rep(c(10,20), each=5))
> dat
id x group gc
1: 1 1.37095845 1 10
2: 2 -0.56469817 1 10
3: 3 0.36312841 1 10
4: 4 0.63286260 1 10
5: 5 0.40426832 1 10
6: 6 -0.10612452 2 20
7: 7 1.51152200 2 20
8: 8 -0.09465904 2 20
9: 9 2.01842371 2 20
10: 10 -0.06271410 2 20我想按组总结一下x。
> dat[,.(mx=mean(x)), by=group]
group mx
1: 1 0.4413039
2: 2 0.6532896完美地做到了这一点。然而,我也想继续使用gc,这是一些组特征,因此在组中是恒定的。我试过了
> dat[,.(gc, mx=mean(x)), by=group]
group gc mx
1: 1 10 0.4413039
2: 1 10 0.4413039
3: 1 10 0.4413039
4: 1 10 0.4413039
5: 1 10 0.4413039
6: 2 20 0.6532896
7: 2 20 0.6532896
8: 2 20 0.6532896
9: 2 20 0.6532896
10: 2 20 0.6532896但这似乎是为dat中的每个原始条目创建回收mx。在SQL方式中,我认为
dat[,.(gc=max(gc), mx=mean(x)), by=group]可以做到这一点,但它只会产生一个错误。我想知道还有什么其他技巧可以获得:
> res
group gc mx
1: 1 10 0.4413039
2: 2 20 0.6532896我确信这个问题以前肯定发生过,但是我找不到答案--很有可能,因为我对这些类型的操作的元词汇表很小,并且我使用了错误的搜索词。
发布于 2019-09-09 18:34:59
我会这样做:
dat[, .(gc = gc[1], mx = mean(x)), by = group]https://stackoverflow.com/questions/57842815
复制相似问题