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

如何在R中使用case_when从多列补全缺失周数据?

解决方案

你的case_when写法错误在于误用了逗号分隔条件与结果,且逻辑判断顺序不符合优先级要求。以下是两种可行的解决方法:

方法一:修正case_when语法

case_when的正确语法是每个分支使用条件 ~ 结果的格式,且需按column1→column2→column3→column4的优先级从高到低判断:

library(dplyr)

df <- data.frame (column1  = c("W12", "W18", "", "W13", "", ""),
                  column2 = c("W12", "W18", "W13", "W25", "", ""),
                  column3 = c("", "", "", "", "", "W26"),
                  column4 = c("", "", "", "", "W23", ""))

# 添加新列complete,保留原列
df <- df %>% 
  mutate(complete = case_when(
    column1 != "" ~ column1,  # 优先取column1的非空值
    column2 != "" ~ column2,  # column1为空时取column2的非空值
    column3 != "" ~ column3,  # column2为空时取column3的非空值
    TRUE ~ column4            # 前三列都为空时取column4的值
  ))

运行后df$complete的结果为:

[1] "W12" "W18" "W13" "W13" "W23" "W26"

方法二:使用coalesce简化代码

coalesce函数会按顺序返回第一个非NA值,只需先将空字符串""转换为NA即可:

library(dplyr)

df <- df %>% 
  mutate(complete = coalesce(
    na_if(column1, ""),
    na_if(column2, ""),
    na_if(column3, ""),
    na_if(column4, "")
  ))

此写法更简洁,结果与方法一完全一致。

错误原因说明

你之前的代码用逗号分隔条件和结果,不符合case_when的语法要求——该函数要求每个判断分支是单侧公式(用~连接条件与结果),逗号会被识别为参数分隔符,导致条件部分被当成独立的逻辑向量,从而触发错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:50:06