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
相关产品推荐
相关产品推荐

