У меня есть кадр данных, содержащий (в случайных местах) значение символа (скажем "foo"
), которое я хочу заменить NA
.Замена символьных значений NA в кадре данных
Каков наилучший способ сделать это во всем кадре данных?
У меня есть кадр данных, содержащий (в случайных местах) значение символа (скажем "foo"
), которое я хочу заменить NA
.Замена символьных значений NA в кадре данных
Каков наилучший способ сделать это во всем кадре данных?
Это:
df[ df == "foo" ] <- NA
Обратите внимание, что если вы пытались заменить NA на «foo», обратное ('df [df == NA] =" foo "') не будет работать; вам нужно будет использовать 'df [is.na (df)] <-" foo "' –
Один из способов пресечь это в зародыше, чтобы преобразовать этот символ NA, когда вы читаете данные в первую очередь.
df <- read.csv("file.csv", na.strings = c("foo", "bar"))
Один альтернативный способ решения ниже:
for (i in 1:ncol(DF)){
DF[which(DF[,i]==""),columnIndex]<-"ALL"
FinalData[which(is.na(FinalData[,columnIndex])),columnIndex]<-"ALL"
}
Другой вариант is.na<-
:
is.na(df) <- df == "foo"
Обратите внимание, что его использование может показаться немного нелогичным, но на самом деле присваиваетNA
значениям df
по указателю с правой стороны.
или тот же '' is.na <- '(df, df == "foo") ' – jogo
Это может быть сделано с dplyr
«s 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
Не забудьте пересмотреть свой столбец as.numeric() переключение несколько символов из„Foo“в НС не будет принуждать весь набор - числовой. Вы должны заставить его. (Если это то, что вы делаете) –