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

R语言技术问询:基于指定条件修改Unit列的因子水平

解决因子列用case_when替换后出现NA的问题

先加载你的示例数据:

df <- structure(list(Species = c("KS", "KS", "BBA", "BBA"), 
                     Unit = structure(c(1L, 2L, 1L, 2L), .Label = c("AON", "PFC"), class = "factor"), 
                     Month = c(NA, NA, NA, NA)), 
                class = "data.frame", row.names = c(NA, -4L))

问题原因

你用case_when时只定义了满足Species == "KS" & Unit == "PFC"的替换规则,没有添加默认返回逻辑,导致所有不匹配条件的行都被赋值为NA。另外因为Unit是因子类型,即便替换值在原因子水平内,缺少默认规则仍会出现异常。

解决方案

方法一:给case_when添加默认返回原值的规则

直接在case_when末尾加上TRUE ~ Unit,让不满足条件的行保留原Unit值:

library(dplyr)

df <- df %>%
  mutate(Unit = case_when(
    Species == "KS" & Unit == "PFC" ~ "AON",
    TRUE ~ Unit  # 所有不满足上面条件的行,返回原Unit
  ))

方法二:先转字符再处理(更灵活)

如果后续需要添加新的因子水平,先把Unit转为字符型处理,完成后再转回因子:

df <- df %>%
  mutate(Unit = as.character(Unit),
         Unit = case_when(
           Species == "KS" & Unit == "PFC" ~ "AON",
           TRUE ~ Unit
         ),
         Unit = as.factor(Unit))

处理后结果

运行任意一种方法后,数据框会变成:

> df
  Species Unit Month
1      KS  AON    NA
2      KS  AON    NA
3     BBA  AON    NA
4     BBA  PFC    NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:44