作为same project中previous one的后续问题
我发现房地产通常是用库存时间来衡量的,库存时间的定义是(活跃挂牌数量)/(每月房屋销售数量,过去12个月的平均值)。在每一次房屋销售之前,我能找到的统计过去12个月内售出房屋数量的最好方法是通过for循环。
homesales$yearlysales = 0
for (i in 1:nrow(homesales))
{
sdt = as.Date(homesales$saledate[i])
x <- homesales %>% filter( sdt - saledate >= 0 & sdt - saledate < 365) %>% summarise(count=n())
homesales$yearlysales[i] =x$count[1]
}
homesales$inventorytime = homesales$inventory / homesales$yearlysales * 12
homesales$inventorytime[is.na(homesales$saledate)] = NA
homesales$inventorytime[homesales$yearlysales==0] = NA显然(?),R语言对使用for循环进行这种类型的选择有一些偏见。有没有更好的方法?
附录1.数据表结构
address, listingdate, saledate
101 Street, 2017/01/01, 2017/06/06
106 Street, 2017/03/01, 2017/08/11
102 Street, 2017/05/04, 2017/06/13
109 Street, 2017/07/04, 2017/11/24
...附录2.我要查找的输出类似于this。
发布于 2020-09-22 02:11:24
以下是任意一天的活动房源数量:
library(tidyverse)
library(lubridate)
tmp <- tempfile()
download.file("https://raw.githubusercontent.com/robhanssen/glenlake-homesales/master/homesalesdata-source.csv", tmp)
data <- read_csv(tmp) %>%
select(ends_with("date")) %>%
mutate(across(everything(), mdy)) %>%
pivot_longer(cols = everything(), names_to = "activity", values_to ="date", names_pattern = "(.*)date")
active <- data %>%
mutate(active = if_else(activity == "listing", 1, -1)) %>%
arrange(date) %>%
mutate(active = cumsum(active)) %>%
group_by(date) %>%
filter(row_number() == n()) %>%
select(-activity)
tibble(date = seq(min(data$date, na.rm = TRUE), max(data$date, na.rm = TRUE), by = "days")) %>%
left_join(active) %>%
fill(active)基本上,我们旋转更长的轴,并将每行数据拆分为两行,表示不同的活动:添加列表或删除列表。然后,累加总和就会给出活动列表的数量。
请注意,这假设您没有丢失任何数据。根据制作csv的规范,您可能会在开始或结束时遗漏活动。但这是对csv本身的警告。
活跃的列表是一个关于时间瞬间的事实。销售是关于一段时间的事实。您可能希望按月汇总销售额,然后使用该月最后一天的活动列表数量,或者该月的平均列表数量。
https://stackoverflow.com/questions/63996697
复制相似问题