我知道下面这个命令将通过按组添加人口并将其除以每个组的行数来总结我的表。
dt[, .(pop=sum(pop_ct)/sum(.N)), , by=.(geoid)]
但是,我想要做的是按每个组中另一列 的行数来减少总和人口数。像这样的东西:
dt[, .(pop=sum(pop_ct)/ nrow(dt$geoid) ), , by=.(geoid)]
这里的要点是geoid
id6
和id7
是ct
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
答案 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