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

如何用data.table的fcase实现dplyr case_when的原列值默认保留功能?

用data.table的fcase实现dplyr case_when的保留原始值逻辑

原dplyr代码通过TRUE ~ x在所有条件不满足时保留x列的原始值,但直接给fcase的default参数传x会报错——因为default要求传入长度为1的标量,不能是向量类型的整列数据。

你可以通过以下两种方式实现等效逻辑:

方法1:添加最后一个TRUE条件匹配剩余情况

这是最贴合原case_when逻辑的方式,按顺序匹配条件,最后用TRUE覆盖所有未满足前面条件的行,返回对应行的原始x值:

library(data.table)
df = setDT(df)[, x := fcase(
  col1 == "a" & col2 == "b", "m1",
  col1 == "b" & col2 == "a", "m2",
  TRUE, x
)]

方法2:结合coalesce处理NA结果

先让fcase在无匹配条件时返回NA,再用data.table::coalesce优先取fcase的结果,若为NA则取原始x值:

library(data.table)
df = setDT(df)[, x := coalesce(
  fcase(
    col1 == "a" & col2 == "b", "m1",
    col1 == "b" & col2 == "a", "m2"
  ),
  x
)]

两种方法都能实现和原case_when完全一致的效果,其中方法1的结构更接近原代码,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:24:57