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

如何为面板数据集创建双向表?R语言人口列年份统计需求

在R中为面板数据集创建双向表

嗨!我来帮你搞定这个问题~首先得明确:我们要基于人口列有可用数据的观测,把长格式的面板数据转换成「个体行×年份列」的双向表,缺失的位置保留空白(对应R里的NA)。下面分两种常用方法实现,你可以按需选择:

先模拟你的数据集(方便演示)

假设你的面板数据是长格式,空白用NA表示缺失值,示例如下:

# 模拟示例面板数据
panel_data <- data.frame(
  个体 = rep(c("A", "B", "C"), each = 5),
  年份 = rep(2018:2022, 3),
  人口 = c(100, NA, 120, 130, NA, NA, 200, 210, NA, 230, 300, 310, NA, 330, 340)
)

步骤1:筛选出人口数据可用的观测

先把人口列存在缺失值的行去掉,只保留有效数据:

# 保留人口非缺失的行
filtered_data <- panel_data[!is.na(panel_data$人口), ]

方法1:用tidyverse(推荐,代码更直观)

如果你习惯用tidyverse工具链,pivot_wider函数可以轻松把长格式转成宽格式的双向表:

# 先加载tidyverse包(未安装的话先运行install.packages("tidyverse"))
library(tidyverse)

# 创建双向表:行是个体,列是年份,值是人口
cross_table <- filtered_data %>%
  pivot_wider(
    id_cols = 个体,          # 指定作为行的变量
    names_from = 年份,       # 指定作为列的变量
    values_from = 人口,      # 填充单元格的变量
    values_fill = NA         # 缺失位置用NA(对应你的空白)填充
  )

# 查看结果
print(cross_table)

运行后会得到类似这样的结果:

# A tibble: 3 × 6
  个体  `2018` `2019` `2020` `2021` `2022`
  <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 A        100     NA    120    130     NA
2 B         NA    200    210     NA    230
3 C        300    310     NA    330    340

方法2:用基础R(无需额外装包)

如果你不想加载第三方包,可以用基础R的reshape函数实现:

# 转换为宽格式
cross_table_base <- reshape(
  filtered_data,
  idvar = "个体",       # 指定行变量
  timevar = "年份",     # 指定列变量
  direction = "wide",   # 声明转成宽格式
  v.names = "人口"      # 指定填充单元格的变量
)

# 移除列名里的"人口."前缀,让列名直接显示年份
colnames(cross_table_base) <- gsub("人口\\.", "", colnames(cross_table_base))

# 查看结果
print(cross_table_base)

额外需求:统计数据可用性的双向表

如果你想要的是标记每个个体在哪些年份有人口数据(用1表示有,0表示无),可以用table函数:

# 生成可用性计数表(每个个体-年份组合的有效数据数量)
availability_table <- table(filtered_data$个体, filtered_data$年份)

# 转成数据框格式查看
as.data.frame.matrix(availability_table)

结果会是:

2018 2019 2020 2021 2022
A     1    0    1    1    0
B     0    1    1    0    1
C     1    1    0    1    1

内容的提问来源于stack exchange,提问作者Pedro Esteban Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:27:40