【问题标题】:Remove Na's From multiple variables in Data Frame at once in R在R中一次从数据框中的多个变量中删除Na
【发布时间】:2019-03-12 19:46:19
【问题描述】:

所以我有一个数据框: df 并绘制它,但是 Na 太多了,效果不好。

所以我尝试用 1) 删除 Na:

 df <- na.omit(df)

但是我的数据越来越乱了。 2):

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

这适用于特定的列名,但在图中我有多个带有 Na 的列名,当我尝试使用相同的命令但对于其他列名时,它会完全更改我的数据。那么任何人都可以帮助我吗?有没有办法!is.na(多个列名) 或者在 ggplot 中忽略 NA?

我正在使用这个:

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

我得到了一个情节,但有 NA 的
然后我尝试删除 NA:

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

删除 Ass_1_hearingA Na's 但我也想要hearingB 但覆盖第一个并且仅在第二个中删除 NA:

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

【问题讨论】:

  • 请发布一些示例数据,展示您正在尝试的代码,并更好地描述您想要的结果。 ggplot 默认忽略 NAs(不绘制它们),因此不清楚您的目标与您看到的结果有何不同。如果您阅读some of the "How to ask" section in the Help center,您可能会有所帮助。另请参阅How to make a reproducible example in R/,了解有关提出问题的 R 特定建议。
  • 我发布了一个我正在尝试使用的示例代码以及我得到了什么
  • 根据您在下面提到的错误,您正在使用 data.table 对象,它有时可能与 data.frame 对象不同。在您的问题中包含有关您的对象的所有信息非常重要。请按照上面 Gregor 的建议,制作一个可重现的示例。
  • 感谢您的代码。没有数据,我们仍然无能为力。请参阅我上面评论中的“如何在 R 中制作可重现的示例”链接,它将告诉您如何将数据添加到您的问题中。在您分享一些数据之前,我们无法提供更多帮助。

标签: r dataframe na


【解决方案1】:

我不确定这是否是您想要的。但是,如果您尝试处理来自geom_barwarnings 关于NAs,您可能会从文档(help("geom_bar"))中注意到该函数具有参数na.rm。因此该功能可以为您删除NAs。试试

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

这样做是你想要的吗?

因此您可能不一定需要删除 df 中的 NA。

编辑: 否则,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 的逻辑向量,其中NAs 不会出现在x 的行中。

或者,使用tidyverse/dplyr,类似于以下内容

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

也应该这样做。

【讨论】:

  • 不清楚如何绘制'NA'?您可以尝试保存您获得的情节并放入问题中(只需拖放)吗?
  • 完整案例不起作用,因为它会删除其他列的值,我不希望这样。我想展示它...在剧情中
  • 然后只需将complete.cases 中的df 子集化为您想要完整案例的列吗?
  • 怎么样?我要在 complete.cases 中子集 df` 吗?
  • 是的,我/我们可以根据代码 sn-ps 和绘图猜测您拥有哪些数据。但这并没有告诉我们您数据的精确结构。我已经向您展示了使用常见数据结构的示例。请参阅 Gregor 在其他 cmets 中给出的关于制作一个良好的最小可重现示例的链接。
猜你喜欢
  • 2016-10-01
  • 2022-09-22
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多