R - взвешенная сумма - PullRequest
0 голосов
/ 24 марта 2020

У меня есть фрейм данных с несколькими ответами из какой-то переписи. Я хочу суммировать количество людей, которые на самом деле живут в определенных местах, и для этого мне нужно также вычислить взвешенную переменную - я не могу просто суммировать все количество людей, которые показывает таблица.

  ZONA   ID_DOM   FE_DOM NO_MORAD
1    1 00010001 15.41667        2
2    1 00010001 15.41667        2
3    1 00010001 15.41667        2
4    1 00010001 15.41667        2
5    1 00010001 15.41667        2
6    1 00010002 15.41667        4

Если повторить, я хочу получить сумму NO_Morad на ZONA, считая только один раз каждый из ID_DOM. Все это весило FE_DOM.

, чтобы просто посчитать количество ID_DOM s, которое я использовал

Zona <- count(OD_2017[!duplicated(OD_2017$ID_DOM),], wt = FE_DOM, Zonas=ZONA, name = "N_domicilios")

, но теперь я не знаю, как это сделать. Я пытался что-то вроде

Zona <- OD_2017 %>%
  group_by(ZONA) %>%
  summarise(ID_DOM = n_distinct(ID_DOM), weights(FE_DOM))

, но это не сработало.

Любые советы?

Спасибо

1 Ответ

0 голосов
/ 24 марта 2020

Я вижу каналы в ваших попытках, но вот один из подходов с использованием data.table.

Данные:

df <- structure(list(ZONA = c(1, 1, 1, 1, 1, 1), ID_DOM = c("00010001", 
"00010001", "00010001", "00010001", "00010001", "00010002"), FE_DOM = c(15.41667, 15.41667, 
15.41667, 15.41667, 15.41667, 15.41667), NO_MORAD = c(2, 2, 2, 
2, 2, 4)), class = "data.frame", row.names = c(NA, -6L))

Код:

library(data.table)
dt <- as.data.table(df)
dt[,unique(.SD)[,.(WeightedSum = sum(FE_DOM * NO_MORAD))],by="ZONA"]

Выход:

   ZONA WeightedSum
1:    1    92.50002
...