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

求助:用for循环与if语句筛选泰坦尼克号符合条件的女性乘客信息

泰坦尼克号乘客数据筛选问题解决

你的代码存在三个核心问题:

  • 循环范围错误:for (i in 1)仅遍历第1行,需覆盖数据集所有行,应改为1:nrow(titanicDataset)
  • 条件维度不匹配:titanicDataset$sex == "female"未指定行索引[i],会返回整列布尔向量,导致if条件长度大于1触发报错
  • 空值判断逻辑错误:判断i == ""完全无效,i是行号不可能为空,应检查home.dest[i]是否为缺失值

修正后的代码

# 加载titanic包并获取数据集
library(titanic)
titanicDataset <- titanic_train

# 遍历数据集每一行
for (i in 1:nrow(titanicDataset)) {
  # 提取当前行的各项数据,提升代码可读性
  current_age <- titanicDataset$Age[i]
  current_embarked <- titanicDataset$Embarked[i]
  current_sex <- titanicDataset$Sex[i]
  current_home_dest <- titanicDataset$Home.Dest[i]
  
  # 多条件判断:过滤符合要求的乘客,同时跳过缺失值
  if (!is.na(current_age) && current_age >= 50 && 
      current_embarked == "S" && current_sex == "female" && 
      !is.na(current_home_dest)) {
    print(current_home_dest)
  }
}

代码说明

  • 提取单条记录的变量,避免重复写索引,逻辑更清晰
  • 加入!is.na(current_age)是因为Age列存在缺失值,防止NA参与比较导致判断异常
  • 使用&&进行单值逻辑判断,比&更高效(&用于逐元素的向量判断)
  • 最后通过!is.na(current_home_dest)确保只输出非空的目的地

额外参考:R风格的向量式写法(无需for循环)

如果不局限于for循环,用dplyr可以更简洁实现需求:

library(dplyr)
library(titanic)

titanic_train %>%
  filter(Sex == "female", Age >= 50, Embarked == "S", !is.na(Home.Dest)) %>%
  pull(Home.Dest)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:58:11