R语言如何基于房屋买卖年份数据生成含哑变量的扩展数据框
R语言房屋交易数据处理解决方案
方案说明
你这个需求用tidyverse的向量化操作实现效率远高于循环,4万条记录可以秒级处理完成,不需要写复杂的循环逻辑。
实现步骤
1. 依赖包安装加载
# 未安装的话先执行安装命令 # install.packages("tidyverse") library(tidyverse)
2. 数据准备
先把你的数据替换为以下两个对应结构的数据集即可:
- 交易数据集:必须包含
Buy(购入年份)、Sold(出售年份)两列 - 房价指数数据集:必须包含
year(年份)、price_index(对应年份房价指数)两列
示例参考数据:
# 示例交易数据 trade_df <- data.frame( Buy = c(1620, 1622), Sold = c(1624, 1628) ) # 示例房价指数数据 price_index_df <- data.frame( year = 1620:1628, price_index = c(100, 102, 105, 108, 112, 115, 118, 122, 125) )
3. 核心代码
result_df <- trade_df %>% # 逐行展开持有期所有统计年份(从购入后一年到出售年) rowwise() %>% mutate(current_year = list(seq(Buy + 1, Sold, by = 1))) %>% unnest(current_year) %>% # 生成出售哑变量 mutate(dummy = ifelse(current_year == Sold, 1, 0)) %>% # 匹配统计年份房价指数 left_join(price_index_df, by = c("current_year" = "year")) %>% rename(current_index = price_index) %>% # 匹配购入年份房价指数 left_join(price_index_df, by = c("Buy" = "year")) %>% rename(buy_index = price_index) %>% # 计算指数差值 mutate(index_diff = current_index - buy_index) %>% # 调整输出列顺序,可按需修改 select(dummy, year_bought = Buy, current_year, index_diff)
输出说明
运行后得到的result_df完全符合你要求的结构,除了目标列外额外新增了index_diff列存储房价指数差值,你可以直接用于后续分析。如果不需要保留中间的指数列,可以在select步骤删掉对应字段即可。
内容的提问来源于stack exchange,提问作者BeginnerinRstudio
相关产品推荐
相关产品推荐

