使用R中的非数字列值删除数据

时间:2016-05-15 00:43:10

标签: r

所以我有一个包含某些个体肺活量的数据集。我试图分析数据分布和关系。唯一的问题是数据有些不完整。一些行包括“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

2 个答案:

答案 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