You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:36:05