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

使用case_when对rowSums结果分类时出现双向量错误的求助

问题原因与解决方案

错误根源

执行rowSums后,data从数据框变成了数值向量,而你用管道%>%将这个向量直接传给case_when时,向量会被当作case_when的第一个参数传入,但case_when的参数应该是一系列条件公式,这就触发了语法错误。


修正方案

方案一:保留数据框结构(推荐)

在数据框中新增行和列,再基于该列完成分类,既保留原始数据,也符合tidyverse的操作逻辑:

library(dplyr)

# 构建数据框并完成行和计算与分类
data <- data.frame(
  x1 = c(1,1,1,1),
  x2 = c(0,1,0,1),
  x3 = c(1,1,0,1),
  x4 = c(1,1,0,0)
) %>%
  mutate(row_sum = rowSums(across(everything()))) %>% # 新增行和列
  mutate(
    category = case_when(
      row_sum == 0 ~ 0,
      row_sum %in% c(1, 2) ~ 1,
      row_sum %in% 3:5 ~ 2
    )
  )

print(data)

运行结果:

x1 x2 x3 x4 row_sum category
1  1  0  1  1       3        2
2  1  1  1  1       4        2
3  1  0  0  0       1        1
4  1  1  1  0       3        2

方案二:直接处理行和向量

如果只需要分类结果,可通过大括号{}修正管道传递逻辑,避免向量被当作case_when的第一个参数:

library(dplyr)

data <- data.frame(
  x1 = c(1,1,1,1),
  x2 = c(0,1,0,1),
  x3 = c(1,1,0,1),
  x4 = c(1,1,0,0)
) %>% rowSums

# 用大括号包裹,确保管道传递的向量在公式中被引用
result <- data %>% {
  case_when(
    . == 0 ~ 0,
    . %in% c(1, 2) ~ 1,
    . %in% 3:5 ~ 2
  )
}

print(result)

运行结果:

[1] 2 2 1 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:31:15