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

R语言中基于数据框多列非数值变量生成新列的求助

修正基于数据框列生成K_status/S_status新列的R代码

问题说明

现有一个简化的大型数据框df,需要基于A、B、C三列生成K_status和S_status两个新列,但当前编写的代码无法得到预期结果,需修正代码实现需求。

示例数据

A <- c("K", "K", "K", "S", "S", "S", "NA")
B <- c("NA", "AA", "AC", "NA", "AA", "AB", "LD")
C <- c("TT", "YY", "YY", "TT", "YY", "Y", "TT")
df <- data.frame(A, B, C)

当前错误代码

df <- df %>%
  mutate(K_status = case_when(all("K", "AA", "YY") %in% df) ~ "Mut",
         TRUE ~ "WT")) %>%
  mutate(S_status = case_when(all("S", "AB", "Y") %in% df) ~ "Mut",
         TRUE ~ "WT")) 

期望输出

A <- c("K", "K", "K", "S", "S", "S", "NA")
B <- c("NA", "AA", "AC", "NA", "AA", "AB", "LD")
C <- c("TT", "YY", "YY", "TT", "YY", "Y", "TT")
K_status <- c("WT", "Mut", "WT", "WT", "WT", "WT", "WT")
S_status <- c("WT", "WT", "WT", "WT", "WT", "Mut", "WT")
df <- data.frame(A, B, C, K_status, S_status)

修正后的代码

library(dplyr)

df <- df %>%
  mutate(
    K_status = case_when(
      A == "K" & B == "AA" & C == "YY" ~ "Mut",
      TRUE ~ "WT"
    ),
    S_status = case_when(
      A == "S" & B == "AB" & C == "Y" ~ "Mut",
      TRUE ~ "WT"
    )
  )

代码说明

原代码错误在于使用all("K", "AA", "YY") %in% df,这是检查整个数据框是否包含这三个值,而非逐行判断当前行的A、B、C列是否分别匹配指定值。修正后的代码直接针对每行的对应列做逻辑与判断,完全匹配需求规则:

  • 当某行A="K"、B="AA"、C="YY"时,K_status设为"Mut",否则为"WT"
  • 当某行A="S"、B="AB"、C="Y"时,S_status设为"Mut",否则为"WT"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:24:22