【问题标题】:Fill column value conditionally on two different columns有条件地在两个不同的列上填充列值
【发布时间】:2018-03-23 14:25:36
【问题描述】:

我搜索过但找不到这个,如果已经有人问过,请指点我一个答案。

我有三列。患者姓名,是否服用抗生素以及使用什么品牌的抗生素。但是,有时我在“抗生素”中有一个缺失值,但我在第三列中有注释告诉我他们没有得到抗生素,因为他们收到的品牌不算数。

df<-data.frame(Names=c("Patient1","patient2","Patient3","Patient4","patient5"),Antibiotics=c("Y","N","Y","","Y"), TypeAntibiotic=c("","","BrandA",,"BrandA",""))

如果第三栏有“BrandA”,我想有条件地填写“抗生素”中的空白。但是,如果“抗生素”中已经有东西,我不想这样做

我知道:

    df%>%mutate(Antibiotics=ifelse(grepl("BrandA",TypeAntibiotic),"N",Antibiotics))

会在我想要的列中给我一个“N”,但我相信它会覆盖我已经在那里的任何“Y”。如果该行中还没有任何东西,我如何只在其中添加一个“N”?

【问题讨论】:

  • 只需在ifelse()if 部分添加另一个条件,用于查找空虚或您担心的任何其他问题。

标签: r tidyr


【解决方案1】:

这是一个基本的 R 解决方案

myindex=df$Antibiotics==""&df$TypeAntibiotic=="BrandA"
df$Antibiotics[myindex]="N"

【讨论】:

    【解决方案2】:
    df$Antibiotics[df$Antibiotics=="" & df$TypeAntibiotic=="BrandA"]<-"N"
    

    哦,我看到@Antonis 给出了相同的解决方案...

    【讨论】:

      【解决方案3】:

      我相信这可能就是您正在寻找的,

      df<-data.frame(Names=c("Patient1","patient2","Patient3","Patient4","patient5"),Antibiotics=c("Y","N","Y","","Y"), TypeAntibiotic=c("","","BrandA","BrandA",""), stringsAsFactors = FALSE)
      
      df$Antibiotics <- ifelse((df$Antibiotics == "") & (df$TypeAntibiotic == "BrandA"),
                               "N", df$Antibiotics
      

      请注意,我稍微修改了 df 的定义,以便变量不是因子。

      如果你想使用已有的代码,你只需要

      df%>%mutate(Antibiotics=ifelse(grepl("BrandA",TypeAntibiotic) & df$Antibiotics == "","N",Antibiotics))
      

      【讨论】:

        【解决方案4】:

        data.table解决方案

        library(data.table)
        df<-as.data.table(df)
        df[Antibiotics=="" & TypeAntibiotic=="BrandA",Antibiotics:='N']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-08
          • 2017-06-22
          • 2015-03-28
          • 2012-05-29
          • 1970-01-01
          • 2019-09-15
          • 1970-01-01
          相关资源
          最近更新 更多