所以我有一个包含某些个体肺活量的数据集。我试图分析数据分布和关系。唯一的问题是数据有些不完整。一些行包括“N / A”作为肺容量。这导致了一个问题,因为它导致不同子集的平均值和sd始终为“N / A”。我如何将其形成一个子集,以便它只包含非N / A的数据?
我试过这个:
fData1 = read.table("lung.txt",header=TRUE)
fData2= fData1[fData1$fev!="N/A"]
但这给了我一个“未确定的列选择错误”。
我该如何制作一个数据集以排除“N / A”的行?
这是我数据集的开头:
id age fev height male smoke
1 72 1.2840 66.5 1 1
2 81 2.5530 67.0 0 0
3 90 2.3830 67.0 1 0
4 72 2.6990 71.5 1 0
5 70 2.0310 62.5 0 0
6 72 2.4100 67.5 1 0
7 75 3.5860 69.0 1 0
8 75 2.9580 67.0 1 0
9 67 1.9160 62.5 0 0
10 70 NA 66.0 0 1
答案 0 :(得分:2)
一种选择是应用不包括NA值的操作:
dat <- read.table("lung.txt", header = T, na.strings = "NA")
mean(dat$fev, na.rm=T) # mean of fev col
sd(dat$fev, na.rm=T)
如果您只是想摆脱NAs:
fData1 <- na.omit(fData1)
fData1 <- na.exclude(fData1) # same result
如果你想用NA保存行,这里有2个选项:
fData2 <- fData1[is.na(fData1$fev), ]
fData2 <- subset(fData1, is.na(fData1$fev))
答案 1 :(得分:1)
如果您只想过滤掉NA
个值的行,可以使用complete.cases()
:
> df
id age fev height male smoke
1 1 72 1.284 66.5 1 1
2 2 81 2.553 67.0 0 0
3 3 90 2.383 67.0 1 0
4 4 72 2.699 71.5 1 0
5 5 70 2.031 62.5 0 0
6 6 72 2.410 67.5 1 0
7 7 75 3.586 69.0 1 0
8 8 75 2.958 67.0 1 0
9 9 67 1.916 62.5 0 0
10 10 70 NA 66.0 0 1
> df[complete.cases(df), ]
id age fev height male smoke
1 1 72 1.284 66.5 1 1
2 2 81 2.553 67.0 0 0
3 3 90 2.383 67.0 1 0
4 4 72 2.699 71.5 1 0
5 5 70 2.031 62.5 0 0
6 6 72 2.410 67.5 1 0
7 7 75 3.586 69.0 1 0
8 8 75 2.958 67.0 1 0
9 9 67 1.916 62.5 0 0