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

如何基于列信息在R中修改数据集:ASFR字段批量置零处理

处理女性数据集的ASFR字段置零操作

我有一个包含50多万名女性的数据集,示例数据如下:

library(tidyverse)

sample <- tibble( 
  iD = c(1),
  age = c(38), 
  child.age1 = c(13),
  child.age2 = c(9), 
  child.age3 = c(NA),  
  asfr15 = 0.0000, 
  asfr16 = 7.40444,  
  asfr17 = 42.87749,  
  asfr18 = 73.05321,
  asfr19 = 98.28869,
  asfr20 = 144.9568,
  asfr21 = 164.976,
  asfr22 = 180.280,
  asfr23 = 191.304,
  asfr24 = 198.4832,
  asfr25 = 202.0248,
  asfr26 = 202.1360,
  asfr27 = 200.3920,
  asfr28 = 197.6840,
  asfr29 = 193.7632,
  asfr30 = 187.6072,
  asfr31 = 179.5616,
  asfr32 = 170.5096,
  asfr33 = 160.8376,
  asfr34 = 150.4840,
  asfr35 = 139.3304,
  asfr36 = 127.7960,
  asfr37 = 115.0280,
  asfr38 = 100.7200,
  asfr39 = 85.6256,
  asfr40 = 182.4384,
  asfr41 = 178.412,
  asfr42 = 171.928, 
  asfr43 = 163.316,
  asfr44 = 152.9056,
  asfr45 = 141.0264,
  asfr46 = 128.008,
  asfr47 = 114.180,
  asfr48 = 99.872, 
  asfr49 = 85.4136
)

需求

  • 用母亲年龄(age字段)减去每个孩子的年龄(child.age1、child.age2、child.age3),将计算结果±1对应的asfr字段置为0。例如:38-13=25,则需将asfr24、asfr25、asfr26置为0;
  • 将母亲年龄(示例中为38)以上对应的asfr字段(asfr39至asfr49)全部置为0。

解决方案

步骤1:处理孩子年龄对应的ASFR置零

通过自定义函数生成需要置零的列名,再批量更新字段值,确保处理50万行数据的效率:

# 生成需要置零的asfr列名的函数
get_zero_cols <- function(mother_age, child_ages) {
  valid_child_ages <- child_ages[!is.na(child_ages)]
  birth_ages <- mother_age - valid_child_ages
  zero_ages <- unique(c(birth_ages - 1, birth_ages, birth_ages + 1))
  # 过滤出合法的asfr年龄范围(15-49)
  zero_ages <- zero_ages[zero_ages >= 15 & zero_ages <= 49]
  paste0("asfr", zero_ages)
}

# 批量处理每行数据,将对应asfr列置零
sample_processed <- sample %>%
  rowwise() %>%
  mutate(zero_cols = list(get_zero_cols(age, c(child.age1, child.age2, child.age3)))) %>%
  ungroup() %>%
  mutate(across(all_of(unlist(zero_cols)), ~0)) %>%
  select(-zero_cols)

步骤2:处理母亲年龄以上的ASFR置零

针对每行母亲年龄,将age+1到49对应的asfr字段全部置零:

sample_processed <- sample_processed %>%
  rowwise() %>%
  mutate(upper_zero_cols = list(paste0("asfr", (age + 1):49))) %>%
  ungroup() %>%
  mutate(across(all_of(unlist(upper_zero_cols)), ~0)) %>%
  select(-upper_zero_cols)

验证结果

查看处理后的ASFR字段,确认目标列已被置零:

sample_processed %>%
  select(starts_with("asfr"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:04:52