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

R语言数据处理疑问:为何统计亲属照料信息时丢失大量行

问题原因与解决方案

嗨,这个问题很常见,我来帮你理清楚~

你得到的结果只有4564行,核心原因是你直接在relative数据集上做了分组统计,但这个数据集本身只包含有亲属照料记录的老年人,那些没有任何照料记录的老人根本没被纳入统计流程里。而且如果没有把统计结果和全量的senior表做关联,自然只会输出有数据的行,丢失了无照料记录的老人。

要得到包含所有10628位老人的结果,关键是要以senior表为基础(确保所有老人都被保留),再关联relative的数据进行统计。这里有两种常用的dplyr实现方法:

方法一:先左连接再分组汇总

从全量的老人表出发,用left_join关联照料数据,这样所有老人都会被保留,无照料记录的老人对应的id_relative和hours_care会自动填充为NA,之后再分组统计:

library(dplyr)

final_result <- senior %>%
  # 左连接,保留senior的所有行
  left_join(relative, by = "id_senior") %>%
  # 按老人ID分组
  group_by(id_senior) %>%
  # 统计亲属数量和总时长
  summarise(
    # 去重统计亲属数,排除NA(无照料的会返回0)
    nbr_relative = n_distinct(id_relative, na.rm = TRUE),
    # 求和时不忽略NA,这样无照料的会保留NA
    sum_hours = sum(hours_care, na.rm = FALSE)
  )

方法二:先统计照料数据再左连接

先在relative上完成分组统计,再把结果左连接到senior表,最后补全缺失值:

library(dplyr)

# 先统计有照料记录的老人的亲属数和总时长
care_summary <- relative %>%
  group_by(id_senior) %>%
  summarise(
    nbr_relative = n_distinct(id_relative),
    sum_hours = sum(hours_care)
  )

# 关联到全量老人表,补全无照料老人的亲属数为0,总时长保留NA
final_result <- senior %>%
  left_join(care_summary, by = "id_senior") %>%
  mutate(nbr_relative = replace_na(nbr_relative, 0))

两种方法都能得到10628行的结果,其中无照料记录的老人nbr_relative为0,sum_hours为NA,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:07:39