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

在R中如何转置时间序列单列数据以适配其余数据集?

你需要完成的是长表转宽表的操作,以下是两种常用实现方案:

使用tidyverse包实现(最简便)

首先加载tidyverse套件,用pivot_wider函数完成转换,同时会自动处理列名生成:

library(tidyverse)

# 执行转换
ds_wide <- ds %>%
  # 清理Reg_crimes列:去除多余空格、转换为数值类型
  mutate(Reg_crimes = as.numeric(trimws(Reg_crimes))) %>%
  # 移除长表专属的行ID列
  select(-ID) %>%
  # 长转宽核心操作
  pivot_wider(
    id_cols = c(Province, Year, Month), # 固定保留的维度列
    names_from = crime_name, # 新列名取自crime_name的不同值
    values_from = Reg_crimes # 新列值取自对应类别的立案数
  ) %>%
  # 按需添加新的行ID列,放在最左侧
  mutate(ID = row_number(), .before = 1)
使用R基础函数实现(无需加载第三方包)

如果你不想安装额外包,可以用基础函数reshape完成转换:

# 先清理Reg_crimes列
ds$Reg_crimes <- as.numeric(trimws(ds$Reg_crimes))

# 长转宽核心操作
ds_wide <- reshape(
  ds,
  idvar = c("Province", "Year", "Month"), # 固定维度列
  timevar = "crime_name", # 要展开为列的字段
  direction = "wide"
)

# 清理默认生成的列名前缀,还原为犯罪类型名称
colnames(ds_wide) <- gsub("Reg_crimes\\.", "", colnames(ds_wide))

# 生成新的行ID列并调整列顺序
ds_wide$ID <- seq(nrow(ds_wide))
ds_wide <- ds_wide[, c("ID", "Province", "Year", "Month", unique(ds$crime_name))]
补充说明
  • 若某省份、年份、月份组合下缺少某类犯罪的记录,转换后对应位置默认填充NA,你可以在pivot_wider中添加values_fill = 0参数,将空缺值替换为0。
  • 转换前请确认Reg_crimes已转换为数值类型,避免后续统计运算出错。

内容的提问来源于stack exchange,提问作者user12973342

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:48:01