Удалить Na из нескольких переменных в Data Frame одновременно в R - PullRequest
1 голос
/ 12 марта 2019

Итак, у меня есть фрейм данных: df, и я строю его, но там слишком много Na, и это нехорошо.

Поэтому я пытаюсь удалить Na с помощью 1):

 df <- na.omit(df)

Но мои данные портятся.2):

 df <- df[!is.na(df$column_name),]

Это работает для определенного имени столбца, но на графике у меня есть несколько имен столбцов с Na, и когда я пытаюсь использовать ту же команду, но для другого имени столбца, это меняет мои данные полностью.Так кто-нибудь может мне помочь?Есть ли способ !is.na (несколько имен столбцов) или игнорировать NA в ggplot?

Я использую это:

df<-Ass1MatrixNoNa %>% gather(test, value, 3:5)
ggplot(df,aes(x=test,fill=value)) +
  geom_bar(position=position_dodge(preserve="single"))

enter image description here

И я получаю заговор, но с NA
Затем я пытаюсь удалить NA:

Ass1MatrixNoNa <- Ass1Matrix[!is.na(Ass1Matrix$Ass_1_hearingA),]

Удаляет Ass_1_hearingA Na Но я также хочу услышать B, но оверидирует первый и NAудаляются только во втором:

Ass1MatrixNoNa <- Ass1Matrix[!is.na(Ass1Matrix$Ass_1_hearingB]

1 Ответ

1 голос
/ 12 марта 2019

Я не уверен, что это то, что вы хотите.Но если вы пытаетесь разобраться с warnings из geom_bar относительно NA с, вы можете заметить из документации (help("geom_bar")), что функция имеет аргумент na.rm.Таким образом, функция может удалить NA с для вас.Попробуйте

ggplot(df,aes(x=test,fill=value)) +
  geom_bar(position=position_dodge(preserve="single"), na.rm = TRUE)

Делает ли это то, что вы хотите?

Так что вам не обязательно нужно удалять NA в df.

EDIT : В противном случае функция complete.cases может помочь вам:

df <- data.frame(x = c(1, NA, 3, 4), value = c(1, 2, 3, 4), fill= c(1, 2, NA, 4))
print(df)
#   x value fill
#1  1     1    1
#2 NA     2    2
#3  3     3   NA
#4  4     4    4

ccol <- c("value", "fill") # Cols to keep 'complete'
df_complete <- df[complete.cases(df[, ccol]), ]
print(df_complete)
#   x value fill
#1  1     1    1
#2 NA     2    2
#4  4     4    4

Выполнение complete.cases(x) возвращает логический вектор с TRUE, где NA s не появляется в строках x.

В качестве альтернативы, используя tidyverse / dplyr, нужно сделать что-то вроде следующего

df_complete2 <- df %>% filter(!is.na(fill) & !is.na(value))

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...