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

如何基于TypeAntibiotic列填充Antibiotics列空值且不覆盖已有值?

解决方法:仅填充Antibiotics空值,不覆盖已有内容

我懂你的痛点——之前的代码会把所有TypeAntibiotic为BrandA的行都改成N,哪怕Antibiotics本来已经有Y的值,这显然不是你想要的。我们需要加一个前提条件:只在Antibiotics是空值的时候,才根据TypeAntibiotic的内容来填充。

方法1:嵌套ifelse精准判断

用dplyr的mutate结合嵌套条件,先检查Antibiotics是否为空,再判断TypeAntibiotic是否为BrandA:

library(dplyr)

# 你的原始数据框
df <- data.frame(Names=c("Patient1","patient2","Patient3","Patient4","patient5"),
                 Antibiotics=c("Y","N","Y","","Y"), 
                 TypeAntibiotic=c("","","BrandA","","BrandA"))

# 执行填充操作
df <- df %>%
  mutate(Antibiotics = ifelse(Antibiotics == "" & grepl("BrandA", TypeAntibiotic), 
                              "N", 
                              Antibiotics))

方法2:用case_when提升可读性

如果后续有更多条件要扩展,case_when会让逻辑更清晰,同样能实现需求:

df <- df %>%
  mutate(Antibiotics = case_when(
    # 仅当Antibiotics为空且TypeAntibiotic是BrandA时,填充为N
    Antibiotics == "" & TypeAntibiotic == "BrandA" ~ "N",
    # 其他所有情况,保留原有的Antibiotics值
    TRUE ~ Antibiotics
  ))

验证结果

运行代码后,你的数据框会变成这样:

print(df)
#       Names Antibiotics TypeAntibiotic
# 1 Patient1           Y               
# 2 patient2           N               
# 3 Patient3           Y         BrandA
# 4 Patient4                           
# 5 patient5           Y         BrandA

可以看到:

  • Patient4的Antibiotics是空值,但TypeAntibiotic不是BrandA,所以保持空
  • patient5的Antibiotics本来是Y,哪怕TypeAntibiotic是BrandA,也没有被修改
  • 完全符合你“仅填充空值,不覆盖已有内容”的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:17