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

R语言在If/Then语句中使用NA判断创建Egg_Number列

问题说明

需要在数据集NIUS2021.ALL中新增名为Egg_Number的列,判定规则如下:

  • 每行对应1个独立鸟巢,该行无NA值时代表巢内有3枚卵
  • 仅length_3字段为NA时代表巢内有2枚卵
  • length_3与length_2字段同时为NA时代表巢内仅有1枚卵

原编写的if/else代码存在几处语法和逻辑错误:

  • R中判断空值不能使用=或==,必须使用is.na()函数
  • R中向量化逻辑与运算符为&,不是AND
  • 原生if/else仅支持单值判断,无法直接对整列数据逐行批量处理
  • 最后分支列名拼写错误,误写为NIUS2021$.ALLEgg_Number
  • 判断顺序错误:若先判断length_3为NA,会把length_2、length_3同时为NA的1枚卵场景误判为2枚卵
正确代码实现

基础R方案

无需加载额外包,直接使用向量化的ifelse()嵌套实现,注意严格按照从特殊到一般的顺序写判断条件:

NIUS2021.ALL$Egg_Number <- ifelse(
  is.na(NIUS2021.ALL$length_3) & is.na(NIUS2021.ALL$length_2), 1,
  ifelse(is.na(NIUS2021.ALL$length_3), 2, 3)
)

tidyverse/dplyr方案

代码可读性更强,适合日常数据处理工作流:

library(dplyr)
NIUS2021.ALL <- NIUS2021.ALL %>%
  mutate(
    Egg_Number = case_when(
      is.na(length_3) & is.na(length_2) ~ 1,
      is.na(length_3) ~ 2,
      TRUE ~ 3
    )
  )

结果验证

针对提供的前6行样例数据,第5行length_3为NA、length_2有有效值,计算得到Egg_Number为2;其余5行length_3均有有效值,Egg_Number为3,完全符合规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:45:25