我有一个如下数据框:
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)
答案 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)。