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

如何在R或Excel中汇总Block级普查数据生成Tract级数据

把Block级普查数据汇总到Tract级的R解决方案

用基础R的aggregate()搞定

之前你困惑aggregate的语法,其实核心就是「要汇总的列 ~ 分组列」的公式结构,再指定数据集和求和函数就行。

假设你的数据集叫census_data,Tract编码列是Tract_GEOID,举几个实用例子:

  • 只汇总Total_Pop列:
tract_total <- aggregate(Total_Pop ~ Tract_GEOID, data = census_data, FUN = sum)
  • 同时汇总多列(比如Total_Pop、White_Pop、Black_Pop):
tract_multi <- aggregate(cbind(Total_Pop, White_Pop, Black_Pop) ~ Tract_GEOID, 
                         data = census_data, FUN = sum)
  • 要是数值列太多不想挨个写,就用.代表所有非分组列,但记得先筛出数值列避免出错:
# 先挑出Tract编码列和所有数值列
num_cols <- sapply(census_data, is.numeric)
tract_all <- aggregate(. ~ Tract_GEOID, data = census_data[, c("Tract_GEOID", names(num_cols[num_cols]))], 
                       FUN = sum)

嫌基础R麻烦?用dplyr更直观

很多人觉得aggregate的公式语法绕,换dplyr的分组汇总逻辑更清晰,步骤如下:

  1. 先装包加载:
install.packages("dplyr")
library(dplyr)
  1. 单列汇总:
tract_dplyr_single <- census_data %>%
  group_by(Tract_GEOID) %>%
  summarise(Total_Pop = sum(Total_Pop, na.rm = TRUE))
  1. 多列汇总:
tract_dplyr_multi <- census_data %>%
  group_by(Tract_GEOID) %>%
  summarise(
    Total_Pop = sum(Total_Pop, na.rm = TRUE),
    White_Pop = sum(White_Pop, na.rm = TRUE),
    Black_Pop = sum(Black_Pop, na.rm = TRUE)
  )
  1. 一键汇总所有数值列:
tract_dplyr_all <- census_data %>%
  group_by(Tract_GEOID) %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

加na.rm = TRUE是为了跳过缺失值,防止求和结果变成NA,很实用。

额外提一句:可以直接在R里生成Tract编码

你之前在Excel里删GEOID最后4位得到Tract编码,其实在R里一步就能搞定,省得来回导数据:

# 假设原始GEOID列叫GEOID,提取前11位(示例GEOID是15位,最后4位是Block,15-4=11)
census_data$Tract_GEOID <- substr(census_data$GEOID, 1, 11)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:50:21