【问题标题】:Removing NA’s from a dataset in R从 R 中的数据集中删除 NA
【发布时间】:2021-12-25 22:41:52
【问题描述】:

我想从所选变量中删除所有 NA,但是当我使用 na.omited() 时,例如:

na.omit(df$livharm) 

它不起作用,而 NA 仍然存在。我也尝试了另一种方法,例如:

married[is.na(livharm1)] <-NA 

我已经使用代码对我正在查看的较大变量中的每个变量执行此操作: 例如

df <- within(df, { 
married <- as.numeric(livharm == 1) 
“
“
“ 

married[is.na(livharm1)] <- NA

})

但是我不确定我实际上需要做什么。任何帮助我将不胜感激!

【问题讨论】:

  • 嗨,我已经尝试过这些,但是它可以正确运行代码,但是当我使用 ggplot 时,它仍然在图表中显示 NA 结果,并且在汇总命令时仍然在表格中显示它们在 r 工作室。谢谢你回到我身边:)
  • 您确定您的 NA 值真的是 NA 吗?它们也可能是性格或因素。
  • @Anonymous_tech 您能否通过将dput(data) 的输出粘贴到您的原始问题中来分享您的数据。谢谢。
  • 谢谢!! :))

标签: r na


【解决方案1】:

使用complete.cases 给出:

dat <- data.frame( a=c(1,2,3,4,5),b=c(1,NA,3,4,5) )

dat
  a  b
1 1  1
2 2 NA
3 3  3
4 4  4
5 5  5

complete.cases(dat)
[1]  TRUE FALSE  TRUE  TRUE  TRUE

# is.na equivalent has to be used on a vector for the same result:
!is.na(dat$b)
[1]  TRUE FALSE  TRUE  TRUE  TRUE

dat[complete.cases(dat),]
  a b
1 1 1
3 3 3
4 4 4
5 5 5

使用na.omitcomplete.cases 相同,但不是返回布尔向量,而是返回对象本身。

na.omit(dat)
  a b
1 1 1
3 3 3
4 4 4
5 5 5

此函数仅应用于向量时返回不同的结果,ggplot2 可能未正确处理该结果。可以通过将其放回数据框中来“拯救”它。 base plot 按预期工作。

na.omit(dat$b)
[1] 1 3 4 5
attr(,"na.action")
[1] 2
attr(,"class")
[1] "omit"

data.frame(b=na.omit(dat$b))
  b
1 1
2 3
3 4
4 5

ggplot2绘图

ggplot(dat[complete.cases(dat),]) + geom_point( aes(a,b) )
# <plot>

# See warning when using original data set with NAs
ggplot(dat) + geom_point( aes(a,b) )
Warning message:
Removed 1 rows containing missing values (geom_point).
# <same plot as above>

【讨论】:

  • 太好了,谢谢!! :))
猜你喜欢
  • 2022-09-22
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2023-03-04
相关资源
最近更新 更多