【问题标题】:R - Weighted sumR - 加权和
【发布时间】:2020-07-05 05:31:20
【问题描述】:

我有一个数据框,其中包含来自某种人口普查的多个答案。 我想将实际居住在某些地方的人数相加,为此我还需要计算一个加权变量 - 我不能只将表格显示的所有人数相加。

  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

再说一遍,我想通过ZONA 得到NO_Morad 的总和,每个ID_DOM 只计算一次。所有这些都以FE_DOM 加权。

只计算我使用的ID_DOMs 的数量

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))

但没有成功。

有什么建议吗?

谢谢

【问题讨论】:

  • 你能显示预期的输出吗
  • 会像 Zona 1 - 92 ... Zona X - ?

标签: r weighted


【解决方案1】:

我在您的尝试中看到了管道,但这是使用 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

【讨论】:

  • 很好,谢谢!无论如何,你知道如何使用管道来做到这一点吗?我猜数据表有点慢,对吗?
  • 我使用 data.table 是因为它在我处理非常大的数据集的许多用例中速度更快。请参阅https://stackoverflow.com/questions/21435339/ 了解其他人如何看待每种方法的优缺点。
猜你喜欢
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2014-11-13
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多