基于行对应列值向DataFrame添加新行:获取各模型净零排放年份
问题描述
我正在分析气候数据,需要找出每个模型(列)达到净零排放的年份(行)。
我已通过循环提取出每个模型首次出现负值(即负排放)的数值(对应截图中的nz_temp行)。
现在我需要创建一行来记录该负值对应的年份。
我尝试使用pull函数,但完全陷入困境!


解决方案
假设你的数据框名为climate_data,年份存储在名为year的列中,其余列为各模型的排放数据,可通过以下步骤实现需求:
- 转长格式处理:将宽格式数据转为长格式,便于按模型分组查找首次负排放年份
library(tidyverse) long_format <- climate_data %>% pivot_longer(cols = -year, names_to = "model", values_to = "emissions")
- 提取各模型首次净零年份:按模型分组,筛选出首次出现负排放的记录,提取对应年份
nz_year_df <- long_format %>% group_by(model) %>% filter(emissions < 0) %>% slice_head(n = 1) %>% select(model, net_zero_year = year)
- 转为宽格式并添加到原数据:将结果转回宽格式,作为新行合并到原数据框中
# 生成待添加的行 nz_row <- nz_year_df %>% pivot_wider(names_from = model, values_from = net_zero_year) %>% mutate(year = "net_zero_year") # 为该行命名标识 # 合并到原数据 updated_data <- bind_rows(climate_data, nz_row)
特殊情况处理
如果你的年份是作为行名存在而非单独列,先将行名转为列:
climate_data <- climate_data %>% rownames_to_column(var = "year")
这种方法无需手动循环,利用tidyverse的向量式操作更高效且易维护。
内容的提问来源于stack exchange,提问作者Holly Wakelin
相关产品推荐
相关产品推荐

