1

以下のこのコマンドは、グループごとの人口を追加し、それを各グループの行数で割ることによってテーブルを要約することを知っています。

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

ただし、私がやりたいことは、各グループの別の列の行数 によって、合計された母集団を分割することです。このようなもの:

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

ここでのポイントは、geoid id6id7が のサブリージョンでct E1010あるため、と の人口は、それらが含まれるより広い地域の人口id6id7同じ割合である必要があるということです。E1010

期待される結果

以下の再現可能な例を使用すると、これは私が得たい結果です。

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

再現可能な例

dt <- data.table(
  udh = LETTERS[c(1,1,1,1,2,2,3,3,3,4,5,5)],
  ct = c('A000','A111','A222','A333','B444','B555','C666','C777','C888','D999','E1010','E1010'),
  pop_udh = c(40,40,40,40,30,30,45,45,45,17,20,20),
  pop_ct = c(20,10,8,2,25,5,5,30,10,17,20,20),
  poor_prop_udh = c(10,10,10,10,5,5,8,8,8,7,9,9),
  geoid = c('id1','id2','id2','id1','id1','id3','id3','id5','id4','id2','id6','id7'))
4

1 に答える 1

3

1 つの方法は、サイズと除算を事前に計算すること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
于 2015-10-27T10:32:27.500 に答える