首页 > 解决方案 > R:家庭库存盘点功能?

问题描述

我有一个我所在社区的房屋销售数据列表,列为

地址,上市日期,销售日期
101街, 2017/01/01, 2017/06/06
106街, 2017/03/01, 2017/08/11
102街, 2017/05/04, 2017/06/13
109街, 2017/07/04, 2017/11/24
...

我想计算上市日期挂牌出售(和未售出)的房屋数量,也看看全年房屋销售和挂牌情况如何变化。

在示例中:

地址、上市日期、销售日期、库存
101街, 2017/01/01, 2017/06/06, 1
106街, 2017/03/01, 2017/08/11, 2
102街, 2017/05/04, 2017/06/13, 3
109街, 2017/07/04, 2017/11/24, 2
...

例如,当只有 106 和 109 街在售时,109 街上市。

是否有一个简单的 1 步 R 表达式可以计算出来?

标签: r

解决方案


我想这是3个简单的步骤。我只是设置标准,我相信其他人将能够通过它。

library(data.table)
library(lubridate)
dt <- data.table(
  address = paste(c(101,106,102,109),"Street"),
  listing_date = ymd(c('2017/01/01','2017/03/01','2017/05/04','2017/07/04')),
  saledate = ymd(c("2017/06/06","2017/08/11","2017/06/13","2017/11/24")),
  key = 'listing_date'))

dt2 <- rbind(dt[,.(date = listing_date, x = 1)], dt[,.(date = saledate, x = -1)])
dt3 <- dt2[, .(x = sum(x)), keyby = date][, .(date, inventory = cumsum(x))]
dt[, inventory := dt3[dt, on=c('date' = 'listing_date'), inventory]]

或者改为单线

dt[,inventory:=dt[,.(d=listing_date:saledate),.(address)][,.N,key=d][dt,N]]
dt[]
#>       address listing_date   saledate inventory
#> 1: 101 Street   2017-01-01 2017-06-06         1
#> 2: 106 Street   2017-03-01 2017-08-11         2
#> 3: 102 Street   2017-05-04 2017-06-13         3
#> 4: 109 Street   2017-07-04 2017-11-24         2

推荐阅读