Ifelse语句替换相应行中的值

时间:2019-02-28 00:29:33

标签: r if-statement

我有一个如下数据框:

 Col1     Col2     COl4    Col5
   A         B       NA      NA
   M         L       NA      lo
   A         N       NA      KE

如果在Col1 = A的情况下,如何将COl4中的NA替换为“通过”,我该怎么做?

当我尝试使用ifelse时,没有得到预期的输出。

预期输出应为:

 Col1     Col2     COl4    Col5
   A         B     Pass      NA
   M         L       NA      lo
   A         N     Pass      KE

我尝试过但没有运气:

df$COl4<-
  ifelse(df$Col1=="A", "Pass", df$COl4)

2 个答案:

答案 0 :(得分:1)

这里没有ifelse()的真正需求。您可以使用标准索引替换。

df$COl4[df$Col1 == "A"] <- "Pass"

这表示我们正在将COl4替换为Col1 == "A"的{​​{1}}。另外,此方法不会像"Pass"这样的属性那样混乱。

答案 1 :(得分:0)

您可以使用case_when

library(tidyverse)

tab <- tibble(Col1 = c("A", "M", "A"), Col2 = c("B", "L", "N"), COl4 = c(NA, NA, NA), Col5 = c(NA, "lo", "KE"))

tab %>%
  mutate(COl4 = case_when(
    Col1 == "A" ~ "Pass",
    TRUE ~ as.character(COl4))
  )
# A tibble: 3 x 4
  Col1  Col2  COl4  Col5 
  <chr> <chr> <chr> <chr>
1 A     B     Pass  NA   
2 M     L     NA    lo   
3 A     N     Pass  KE 

使用case_when的好处是您的条件太多!

TRUE用于不需要任何条件的其余COl4)。

相关问题