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

R语言:计算纵向区县数据集中各区县首次停电的间隔年数

计算区县首次停电所需年数

给定纵向数据集,其中blackout字段标记区县当年是否经历过至少一次停电,需要统计每个区县首次停电的年份计数(从观测的第一年开始数),全程未停电的区县记为5。

原始数据集

df <- data.frame(district= rep(c(1000:1003), each=4),
                 year= rep(c(2000:2003), rep=4),
                 blackout= c(0,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1))

目标输出

df.1 <- data.frame(district= c(1000:1003),
                 time= c(3,5,1,2))

解决方案

方法1:使用dplyr包(直观易读)

先加载dplyr,按区县分组后给每个区县的观测年份按顺序编号,再提取首次停电的年份序号;若无停电记录则返回5。

library(dplyr)

df.1 <- df %>%
  group_by(district) %>%
  # 给每个区县的年份按观测顺序编1-4的序号
  mutate(year_count = row_number()) %>%
  summarize(
    time = ifelse(any(blackout == 1), 
                  min(year_count[blackout == 1]), 
                  5)
  ) %>%
  ungroup()

方法2:基础R实现(无需额外包)

利用aggregate函数按区县分组,自定义函数查找首次停电的位置,无记录则返回5。

df.1 <- aggregate(blackout ~ district, data = df, FUN = function(x) {
  # 找到第一个blackout=1的索引
  first_blackout <- which(x == 1)[1]
  # 无停电则返回5,否则返回索引值
  if (is.na(first_blackout)) 5 else first_blackout
})
# 重命名列名匹配目标格式
names(df.1)[2] <- "time"

两种方法运行后都会得到符合要求的目标数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:12:13