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

基于Base R,如何从仅含Survived列的泰坦尼克数据中推导死亡数据?

问题描述

现有泰坦尼克数据集仅包含Survived列(0代表未存活,1代表存活),无单独的死亡相关列。已通过Base R编写如下代码,计算不同舱位、性别的成年人员存活比例,现需处理数据推导死亡人员的相关数据:

propCS <- matrix(, nrow = 3, ncol = 2)
dataChildren <- data[data$Age > 18,]
dataMale <- dataChildren[dataChildren$Sex == "male",]
dataFirst <- dataMale[dataMale$Pclass == "First", ]
dataSecond <- dataMale[dataMale$Pclass == "Second", ]
dataThird <- dataMale[dataMale$Pclass == "Third", ]

propCS[1,1] <- sum(dataFirst$Survived) / length(dataFirst$Survived)
propCS[2,1] <- sum(dataSecond$Survived) / length(dataSecond$Survived)
propCS[3,1] <- sum(dataThird$Survived) / length(dataThird$Survived)

dataFemale <- dataChildren[dataChildren$Sex == "female",]
dataFirst <- dataFemale[dataFemale$Pclass == "First", ]
dataSecond <- dataFemale[dataFemale$Pclass == "Second", ]
dataThird <- dataFemale[dataFemale$Pclass == "Third", ]

propCS[1,2] <- sum(dataFirst$Survived) / length(dataFirst$Survived)
propCS[2,2] <- sum(dataSecond$Survived) / length(dataSecond$Survived)
propCS[3,2] <- sum(dataThird$Survived) / length(dataThird$Survived)
解决方案

死亡比例的计算逻辑非常直接:死亡比例 = 1 - 存活比例,因为每个分组的总人数固定,存活与死亡的占比之和为1。下面提供两种实现方式:

方式一:基于现有propCS矩阵直接推导

如果已经运行完原代码得到了存活比例矩阵propCS,只需一行代码就能生成死亡比例矩阵:

# 生成死亡比例矩阵
propCS_death <- 1 - propCS
# 可选:为矩阵添加维度名称,提升可读性
dimnames(propCS_death) <- list(c("First", "Second", "Third"), c("Male", "Female"))

方式二:重构原代码,同时计算存活与死亡比例

原代码存在大量重复的子集创建操作,可通过aggregate函数简化分组计算流程,一次性得到存活和死亡比例:

# 筛选成年人员(年龄>18)
adult_data <- data[data$Age > 18, ]

# 按舱位、性别分组,同时计算存活和死亡比例
survive_death_stats <- aggregate(
  Survived ~ Pclass + Sex, 
  data = adult_data, 
  FUN = function(x) {
    surv_prop <- sum(x) / length(x)
    death_prop <- 1 - surv_prop
    return(c(Survived = surv_prop, Died = death_prop))
  }
)

# 可选:转换为矩阵格式(与原propCS结构对应)
# 存活比例矩阵
propCS_survive <- matrix(
  survive_death_stats$Survived, 
  nrow = 3, 
  ncol = 2, 
  dimnames = list(c("First", "Second", "Third"), c("Male", "Female"))
)
# 死亡比例矩阵
propCS_death <- matrix(
  survive_death_stats$Died, 
  nrow = 3, 
  ncol = 2, 
  dimnames = list(c("First", "Second", "Third"), c("Male", "Female"))
)

说明

  • 重构后的代码避免了重复创建子集,代码更简洁且易维护
  • 两种方式得到的死亡比例数据完全一致,可根据实际需求选择使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:01:24