【发布时间】:2014-01-20 17:44:49
【问题描述】:
我希望根据以下两个条件从我的数据集中删除行:
- 如果 3 个连续单元格为
NA或 ,则删除行
- 如果四个或更多单元格是
NA
我的样本数据:
data <- rbind(c(1,1,2,3,4,2,3,2),
c(NA,1, NA, 4,1,1,NA,2),
c(1,4,6,7,3,1,2,2),
c(NA,3, NA, 1,NA,2,NA,NA),
c(1,4, NA, NA,NA,4,3,2))
我在现有问题中进行了研究,发现na.omit 或complete.cases 可以删除带有NA 的行,但由于我有条件,进一步研究我在现有问题中发现了以下代码:
data[! rowSums(is.na(data)) >4 , ]
data[! rowSums(is.na(data)) ==3 , ]
第一行完全满足我的第二个条件。第二行确实删除了包含三个 NA 的行,但不查找连续的行并删除了总共 3 个 NA 的任何行。例如:
> data
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 2 3 4 2 3 2
[2,] NA 1 NA 4 1 1 NA 2
[3,] 1 4 6 7 3 1 2 2
[4,] NA 3 NA 1 NA 2 NA NA
[5,] 1 4 NA NA NA 4 3 2
> data[! rowSums(is.na(data)) ==3 , ]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 2 3 4 2 3 2
[2,] 1 4 6 7 3 1 2 2
[3,] NA 3 NA 1 NA 2 NA NA
我真正想要的是仅删除第 5 行,因为它有三个连续的 NA,而不是第 2 行。
谁能告诉我如何克服这个问题?
【问题讨论】: