У меня есть кадр данных, содержащий (в случайных местах) значение символа (скажем "foo"
), которое я хочу заменить с помощью NA
.
Какой лучший способ сделать это во всем кадре данных?
У меня есть кадр данных, содержащий (в случайных местах) значение символа (скажем "foo"
), которое я хочу заменить с помощью NA
.
Какой лучший способ сделать это во всем кадре данных?
Это:
df[ df == "foo" ] <- NA
Один из способов пресечь это в зародыше - это преобразовать этот символ в NA, когда вы сначала читаете данные.
df <- read.csv("file.csv", na.strings = c("foo", "bar"))
Другой вариант: is.na<-
:
is.na(df) <- df == "foo"
Обратите внимание, что его использование может показаться немного интуитивно понятным, но фактически присваивает значения NA
значениям df
в индексе справа.
Это можно сделать с помощью dplyr::mutate_all()
и replace
:
library(dplyr)
df <- data_frame(a = c('foo', 2, 3), b = c(1, 'foo', 3), c = c(1,2,'foobar'), d = c(1, 2, 3))
> df
# A tibble: 3 x 4
a b c d
<chr> <chr> <chr> <dbl>
1 foo 1 1 1
2 2 foo 2 2
3 3 3 foobar 3
df <- mutate_all(df, funs(replace(., .=='foo', NA)))
> df
# A tibble: 3 x 4
a b c d
<chr> <chr> <chr> <dbl>
1 <NA> 1 1 1
2 2 <NA> 2 2
3 3 3 foobar 3
Другой вариант dplyr
:
df <- na_if(df, 'foo')
Ниже приведен один альтернативный способ:
for (i in 1:ncol(DF)){
DF[which(DF[,i]==""),columnIndex]<-"ALL"
FinalData[which(is.na(FinalData[,columnIndex])),columnIndex]<-"ALL"
}
Используя 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"
Если вам нужно сделать это для нескольких столбцов, вы можете передать "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