c-u*_*hin 83
这个:
df[ df == "foo" ] <- NA
Run Code Online (Sandbox Code Playgroud)
JoF*_*wld 66
解决这个问题的一种方法是在首先读取数据时将该字符转换为NA.
df <- read.csv("file.csv", na.strings = c("foo", "bar"))
Run Code Online (Sandbox Code Playgroud)
cam*_*lle 18
使用dplyr::na_if,您可以用 替换特定值NA。在这种情况下,那就是"foo".
library(dplyr)
set.seed(1234)
df <- data.frame(
id = 1:6,
x = sample(c("a", "b", "foo"), 6, replace = T),
y = sample(c("c", "d", "foo"), 6, replace = T),
z = sample(c("e", "f", "foo"), 6, replace = T),
stringsAsFactors = F
)
df
#> id x y z
#> 1 1 a c e
#> 2 2 b c foo
#> 3 3 b d e
#> 4 4 b d foo
#> 5 5 foo foo e
#> 6 6 b d e
na_if(df$x, "foo")
#> [1] "a" "b" "b" "b" NA "b"
Run Code Online (Sandbox Code Playgroud)
如果您需要对多列执行此操作,则可以"foo"从mutate_at.
df %>%
mutate_at(vars(x, y, z), na_if, "foo")
#> id x y z
#> 1 1 a c e
#> 2 2 b c <NA>
#> 3 3 b d e
#> 4 4 b d <NA>
#> 5 5 <NA> <NA> e
#> 6 6 b d e
Run Code Online (Sandbox Code Playgroud)
另一种选择是is.na<-:
is.na(df) <- df == "foo"
Run Code Online (Sandbox Code Playgroud)
请注意,它的使用可能看起来有点违反直觉,但它实际上将值分配 给右侧的索引。NAdf