用 R 中的字符替换特定的 NA 值

LDT*_*LDT 1 r dplyr data.table

我正在寻找一种巧妙的方法来用字符替换特定的 NA 值。

\n

示例 data.frame 如下所示

\n
library(tidyverse)\ndf <- tibble(genes=c("A","B","C"), x=c(NA,NA,4), y=c(NA,3,4))\ndf\n#> # A tibble: 3 \xc3\x97 3\n#>   genes     x     y\n#>   <chr> <dbl> <dbl>\n#> 1 A        NA    NA\n#> 2 B        NA     3\n#> 3 C         4     4\n
Run Code Online (Sandbox Code Playgroud)\n

创建于 2023-03-27,使用reprex v2.0.2

\n

我想将x 列中的gene==A替换为. x 列中的其余值应保持不变。我尝试使用和,但出现错误。NA valueYesmutatecase_when()

\n

我希望我的约会看起来像这样

\n
#> # A tibble: 3 \xc3\x97 3\n#>    genes     x     y\n#>   <chr>    <dbl> <dbl>\n#> 1   A       Yes    NA\n#> 2   B        NA     3\n#> 3   C         4     4\n\n
Run Code Online (Sandbox Code Playgroud)\n

Ron*_*hah 5

既然您已经在 中找到了答案dplyr,我将在基础 R 和 中提供解决方案data.table

基础 R -

df$x[is.na(df$x) & df$genes == "A"] <- "Yes"
Run Code Online (Sandbox Code Playgroud)

data.table需要显式地将列更改为字符,而不是像基本 R 中那样隐式类型转换。

library(data.table)
df$x <- as.character(df$x)
setDT(df)[is.na(x) & genes == "A", x := "Yes"]
df

#   genes    x  y
#1:     A  Yes NA
#2:     B <NA>  3
#3:     C    4  4
Run Code Online (Sandbox Code Playgroud)