基于其他列

时间:2015-10-27 10:17:21

标签: r data.table group-summaries

我知道下面这个命令将通过按组添加人口并将其除以每个组的行数来总结我的表。

dt[, .(pop=sum(pop_ct)/sum(.N)), , by=.(geoid)]

但是,我想要做的是按每个组中另一列 的行数来减少总和人口数。像这样的东西:

dt[, .(pop=sum(pop_ct)/ nrow(dt$geoid) ), , by=.(geoid)]

这里的要点是geoid id6id7ct E1010的子区域,因此id6和{的人口{1}}应该是包含它们的较大区域id7中人口的相等比例。

预期结果

使用下面的可重复示例,这是我想要的结果:

E1010

可重复的示例

>    geoid pop
> 1:   id1  47
> 2:   id2  35
> 3:   id3  10
> 4:   id5  30
> 5:   id4  10
> 6:   id6  10
> 7:   id7  10

1 个答案:

答案 0 :(得分:3)

一种方法是预先计算ct的大小和相应的除法,例如

dt[, N := .N, by = ct
   ][, .(pop = sum(pop_ct)/N[1L]), by = geoid]
#    geoid pop
# 1:   id1  47
# 2:   id2  35
# 3:   id3  10
# 4:   id5  30
# 5:   id4  10
# 6:   id6  10
# 7:   id7  10