r - 在R中一次从数据框中的多个变量中删除Na
问题描述
所以我有一个数据框: 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]
解决方案
我不确定这是否是你想要的。但是,如果您尝试warnings
从geom_bar
有关NA
s 的角度进行处理,您可能会从文档 ( help("geom_bar")
) 中注意到该函数具有参数na.rm
。因此该功能可以为您删除NA
s 。尝试
ggplot(df,aes(x=test,fill=value)) +
geom_bar(position=position_dodge(preserve="single"), na.rm = TRUE)
这样做是你想要的吗?
因此,您可能不一定需要删除df
.
编辑:否则,该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))
也应该这样做。
推荐阅读
- c - 如何让函数在 C 中返回自己的类型?
- python - (haystack + elasticsearch) {{ result.object.get_absolute_url }} 不起作用(我有 get_absolute_url() 方法)
- android - 如何在 Android 11 的后台查看蓝牙的状态(开/关)?
- c - c语言中的TCP客户端/服务器
- c - 如何将库头添加到公共范围
- javascript - 将 EJS 上呈现的数组传递给 Chart.js
- assembly - 将指令数修改为一条
- python - 找不到 numpyro.render_model
- python - 将 yolov4-tiny 转换为 transflow lite: ValueError: cannot reshape array of size 374698 into shape (256,256,3,3)
- flutter - 如何检查一组文本编辑控制器以查看它们是否为空?