gpt4 book ai didi

r - 何时使用 na.omit 与 Complete.cases

转载 作者:行者123 更新时间:2023-12-03 01:41:06 24 4
gpt4 key购买 nike

我有以下代码比较 na.omit 和complete.cases:

> mydf
AA BB
1 2 2
2 NA 5
3 6 8
4 5 NA
5 9 6
6 NA 1
>
>
> na.omit(mydf)
AA BB
1 2 2
3 6 8
5 9 6
>
> mydf[complete.cases(mydf),]
AA BB
1 2 2
3 6 8
5 9 6
>
> str(na.omit(mydf))
'data.frame': 3 obs. of 2 variables:
$ AA: int 2 6 9
$ BB: int 2 8 6
- attr(*, "na.action")=Class 'omit' Named int [1:3] 2 4 6
.. ..- attr(*, "names")= chr [1:3] "2" "4" "6"
>
>
> str(mydf[complete.cases(mydf),])
'data.frame': 3 obs. of 2 variables:
$ AA: int 2 6 9
$ BB: int 2 8 6
>
> identical(na.omit(mydf), mydf[complete.cases(mydf),])
[1] FALSE

是否存在应该使用其中一种或另一种的情况,或者它们实际上是相同的?

最佳答案

complete.cases 应用于您的所有列时,na.omitcomplete.cases 在功能上确实是相同的。对象(例如data.frame):

R> all.equal(na.omit(mydf),mydf[complete.cases(mydf),],check.attributes=F)
[1] TRUE

但是我发现这两个函数之间有两个根本区别(很可能还存在其他区别)。首先,na.omit 向对象添加一个 na.action 属性,提供有关如何修改数据(WRT 缺失值)的信息。我想象一个简单的用例,如下所示:

foo <- function(data) {
data <- na.omit(data)
n <- length(attributes(na.omit(data))$row.names)
message(sprintf("Note: %i rows removed due to missing values.",n))
# do something with data
}
##
R> foo(mydf)
Note: 3 rows removed due to missing values.

我们向用户提供一些相关信息。我确信更具创造力的人可以(并且可能已经)找到(找到)na.action 属性的更好用途,但您明白了。

其次,complete.cases 允许对缺失值进行部分操作,例如

R> mydf[complete.cases(mydf[,1]),]
AA BB
1 2 2
3 6 8
4 5 NA
5 9 6

根据变量所代表的内容,您可能会觉得为 BB 列输入值很舒服,但对于 AA 列则不然,因此使用 complete.cases 这样可以让你更好地控制。

关于r - 何时使用 na.omit 与 Complete.cases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29472540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com