gpt4 book ai didi

删除 R 中的 "NA"值(出于某种原因 na.omit 和 complete.cases 仅适用于一个变量...)

转载 作者:行者123 更新时间:2023-12-02 05:33:20 25 4
gpt4 key购买 nike

此作业的第一部分是从外部 http 站点导入数据;该数据包含八个变量和 1,339 个观测值。其中四个变量(年龄、高度、体重、igf1)包含 NA 值(注意:其他变量也可能有 NA 值,但我不关心它们)。我需要消除这四个变量中的 NA 值:这是我苦苦挣扎的地方。

这是我目前所拥有的:

#imports dataset from internet
importData <- read.table("http://people.sc.fsu.edu/~jburkardt/datasets/iswr/juul2.csv", sep=',', header=T)
#inspects the data:
str(importData)

基本上,我想删除年龄、高度、体重和 igf1 中的所有 NA 值。当我还剩 858 次观察时,我就知道我成功了。

三个变量(高度、体重、igf1)包含因子类型信息。其中一个变量(年龄)包含数字信息。我无法在它们之间成功实现 complete.cases 和/或 na.omit:这些函数似乎只适用于 $age,它们消除了五个 NA 值(但不触及其他变量)

我需要帮助删除剩余变量中的 NA 值。同样,当我完成后,我应该有 858 个观察值。

最佳答案

问题是您的数据文件将所有值都用引号引起来,如下所示:

"age", "height", "menarche", "sex", "igf1", "tanner", "testvol", "weight"
"NA", "NA", "NA", "NA", "90.0", "NA", "NA", "NA"
"NA", "NA", "NA", "NA", "88.0", "NA", "NA", "NA"

当 R 读取它时,它会将所有值作为字符串,默认情况下表示为因子。 NA 只是作为这些因素的一个级别的标签。你可以用 str 看到这个:

> str(importData)
'data.frame': 1339 obs. of 8 variables:
$ age : num NA NA NA NA NA 0.17 0.17 0.17 0.17 0.17 ...
$ height : Factor w/ 600 levels " 110.8"," 111.5",..: 600 600 600 600 600 600 600 600 600 600 ...
$ menarche: Factor w/ 3 levels " 1"," 2"," NA": 3 3 3 3 3 3 3 3 3 3 ...
$ sex : Factor w/ 3 levels " 1.00"," 2.00",..: 3 3 3 3 3 1 1 1 1 1 ...
$ igf1 : Factor w/ 501 levels " 100.0"," 101.0",..: 490 487 53 55 23 2 498 6 10 474 ...
$ tanner : Factor w/ 6 levels " 1"," 2"," 3",..: 6 6 6 6 6 1 1 1 1 1 ...
$ testvol : Factor w/ 26 levels " 1"," 10"," 11",..: 26 26 26 26 26 26 26 26 26 26 ...
$ weight : Factor w/ 518 levels " 14.1"," 17.9",..: 518 518 518 518 518 518 518 518 518 518 ...

因此,在不考虑因素的情况下读取您的数据,所有因素都读取为数字:

> importData <- read.csv("http://people.sc.fsu.edu/~jburkardt/datasets/iswr/juul2.csv",
stringsAsFactors=F, na.strings=c(NA,"NA"," NA"))
> str(importData)
'data.frame': 1339 obs. of 8 variables:
$ age : num NA NA NA NA NA 0.17 0.17 0.17 0.17 0.17 ...
$ height : num NA NA NA NA NA NA NA NA NA NA ...
$ menarche: int NA NA NA NA NA NA NA NA NA NA ...
$ sex : num NA NA NA NA NA 1 1 1 1 1 ...
$ igf1 : num 90 88 164 166 131 101 97 106 111 79 ...
$ tanner : int NA NA NA NA NA 1 1 1 1 1 ...
$ testvol : int NA NA NA NA NA NA NA NA NA NA ...
$ weight : num NA NA NA NA NA NA NA NA NA NA ...

现在删除 NA:

> data <- importData[complete.cases(importData[c("age","height","weight","igf1")]),]
> str(data)
'data.frame': 858 obs. of 8 variables:
$ age : num 6 6.08 6.26 6.4 6.42 6.43 6.61 6.63 6.7 6.72 ...
$ height : num 112 117 120 116 116 ...
$ menarche: int NA NA NA NA NA NA NA NA NA NA ...
$ sex : num 1 1 1 1 1 1 1 1 1 1 ...
$ igf1 : num 98 242 196 179 126 142 236 148 174 136 ...
$ tanner : int 1 1 1 1 1 1 1 1 1 1 ...
$ testvol : int 1 1 1 1 1 1 1 2 1 1 ...
$ weight : num 19.1 21.7 24.7 19.6 20.6 20.2 28 21.6 26.1 22.6 ...

关于删除 R 中的 "NA"值(出于某种原因 na.omit 和 complete.cases 仅适用于一个变量...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826124/

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