r - 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 表达式可以计算出来?
解决方案
我想这是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
推荐阅读
- r - 在模块中使用 shiny.i18n 翻译闪亮的应用程序?
- ubuntu - 无法建立 ssh 连接,/bin/bash: No such file or directory
- node.js - 用 Jest 模拟 SQS
- ruby-on-rails - Rails 查询关联(加入)'rich_text' 不是 nil/empty
- php - 我需要 preg_match_all() 模式在方括号标签 PHP 中获取字符串
- node.js - 如何使用 mongoose 更新 MongoDb 中的嵌入式数组/对象?
- python - 循环遍历字符串列表并删除特定列表项(i)之后的所有项目,其中 i 可以是 a 或 b 或 c
- deep-learning - 什么是多标签二元分类?
- javascript - 在运行教程中给出的代码后,按照 chrome 扩展教程得到“Uncaught SyntaxError:missing )”
- android - 添加工厂时出现 Moshi ArrayOutOfBoundsException