如何删除NA

时间:2016-01-28 21:46:47

标签: r

首先,如何将NA更改为任何内容?

x[x==NA] <- "anything"

这不起作用。

另外,如何删除NA上有条件的数据帧中的行?例如:

    [,1][,2][,3]
[1,]  NA  NA 284
[2,] 233 182 249
[3,] 177 201  NA

我想删除该特定行中包含2个或更多NA的行,因此会导致:

    [,1][,2][,3]
[2,] 233 182 249
[3,] 177 201  NA

有人标记我的问题重复,但实际上我想控制NA的数量以删除行,complete.cases(x)无法对其进行任何控制。

4 个答案:

答案 0 :(得分:2)

您还可以使用complete.cases()

x <- x[complete.cases(x),]

答案 1 :(得分:1)

这是另一种可能性:

x[!is.na(rowSums(x)),]
#[1] 233 182 249

数据

x <- matrix(c(NA , NA, 284, 233, 182, 249, 177, 201, NA), byrow=TRUE, ncol=3)

要控制NA值的容差(例如,仅排除至少有NA个值的行):

x[rowSums(is.na(x))<2,]

答案 2 :(得分:0)

替换NAs:

x[which(is.na(x))] <- 0  # will be replaced by 0

使用apply函数删除具有两个或更多NA的行:

x[-which(apply(x, 1, function(xx) length(which(is.na(xx)))) >= 2),]

答案 3 :(得分:0)

我认为其他人回答你问题的第二部分。回答你的第一部分。

如果x是向量

x <- c(1,2,3,NA,4,NA)
x[is.na(x)] <- "anything"

如果x是数据框

x <- c(1,1,1,NA,1,NA)
df <- data.frame(var1=x,var2=x)
df$var1[is.na(df$var1)] <- -1