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

R语言case_when函数仅读取首行,无法创建新变量求助

问题分析与解决方案

核心问题点

  • 未加载依赖包:case_when()是dplyr包的专属函数,未提前运行library(dplyr)会导致R无法识别该函数,代码执行失效。
  • 区间逻辑错误与间隙:
    • 原代码存在数值覆盖不全的情况,比如260、520这类临界值未被任何条件匹配,且未处理等于1300的数值;
    • 第二个mutate代码的第一个条件完全写反(nwspol >=260却对应0-260 minutes),逻辑完全错误。
  • 管道操作未保存结果:使用%>% mutate()时,若未将结果赋值回原数据框,R仅会临时打印结果,不会修改原数据集,自然看不到新生成的变量。

修正后的代码

写法一:基础赋值式(需加载dplyr)

library(dplyr)

italy$nwspol_re <- case_when(
  italy$nwspol <= 260 ~ "0-260 mins",
  italy$nwspol <= 520 ~ "261-520 mins",
  italy$nwspol <= 780 ~ "521-780 mins",
  italy$nwspol <= 1040 ~ "781-1040 mins",
  italy$nwspol <= 1300 ~ "1041-1300 mins",
  TRUE ~ "超出范围" # 处理大于1300的异常值
)

说明:利用case_when()从上到下匹配的特性,无需重复写下限,简化代码同时避免区间间隙

写法二:管道+mutate式

library(dplyr)

# 必须将结果赋值回原数据框,否则新变量不会被保存
italy <- italy %>%
  mutate(nwspol_re = case_when(
    nwspol <= 260 ~ "0-260 mins",
    nwspol <= 520 ~ "261-520 mins",
    nwspol <= 780 ~ "521-780 mins",
    nwspol <= 1040 ~ "781-1040 mins",
    nwspol <= 1300 ~ "1041-1300 mins",
    TRUE ~ "超出范围"
  ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:47:20