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

R语言:按NUMERO分组,基于多列条件生成共享变量的问题

问题描述

给定数据集Unitatsconsum_2021,结构如下:

structure(list(NUMERO = structure(c(15, 16, 16, 17, 17, 18, 18, 
19, 19, 19, 20, 20, 20, 21, 21, 21), format.stata = "%12.0g"), 
    edat = c(41, 84, 53, 66, 65, 73, 72, 62, 60, 34, 54, 52, 
    24, 48, 12, 17), membres = c(1L, 2L, 2L, 2L, 2L, 2L, 
    2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -16L), groups = structure(list(
    NUMERO = structure(c(15, 16, 17, 18, 19, 20, 21), format.stata = "%12.0g"), 
    .rows = structure(list(1L, 2:3, 4:5, 6:7, 8:10, 11:13, 14:16), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -7L), .drop = TRUE))

需要创建新变量unitats_consum,计算公式为:

1 + 0.5*((年龄>13的家庭成员数)-1) + 0.3*(年龄<=13的家庭成员数)

要求同一NUMERO(家庭编号)对应的unitats_consum值完全一致。

尝试的代码存在条件运算符使用错误,且分组计算逻辑不准确:

Despesa_unitatsconsum_2021 <- Despesa_membres_llar_2021 %>%
group_by(NUMERO) %>%
  mutate(unitats_consum = (1 + 0.5*((membres if edat > 13)-1) + 0.3*((membres if edat <= 13))))
解决方案

核心思路

  1. 按NUMERO分组,确保每个家庭的计算结果统一
  2. 分组后统计每个家庭中年龄>13的成员数和年龄<=13的成员数
  3. 代入公式计算unitats_consum,并将结果广播到该组的所有行

正确代码

# 先解除原有分组(避免层级冲突)
Unitatsconsum_2021 <- Unitatsconsum_2021 %>% ungroup()

# 分组计算并生成目标变量
Despesa_unitatsconsum_2021 <- Unitatsconsum_2021 %>%
  group_by(NUMERO) %>%
  mutate(
    # 统计家庭内年龄>13的成员数量
    adults = sum(edat > 13),
    # 统计家庭内年龄<=13的成员数量
    kids = sum(edat <= 13),
    # 代入公式计算消费单位
    unitats_consum = 1 + 0.5*(adults - 1) + 0.3*kids
  ) %>%
  # 可选:移除中间统计变量
  select(-adults, -kids)

代码说明

  • sum(edat > 13):在分组内将布尔值(TRUE/FALSE)转换为数值(1/0)求和,得到对应年龄区间的成员数
  • mutate会将分组计算的结果自动应用到该组所有行,确保同一NUMERO的unitats_consum值完全一致
  • 若原数据集已分组,先执行ungroup()可避免分组层级冲突

结果验证

以NUMERO=21为例,该家庭有3个成员:年龄48(>13)、12(<=13)、17(>13),计算得:
adults=2,kids=1
unitats_consum=1 + 0.5*(2-1) + 0.3*1 = 1.8
该家庭的3行数据都会得到1.8的结果,符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:48:26