2016-01-28 86 views
-1

首先,如何將NA更改爲任何內容?如何刪除條件爲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)不能提供任何控制權。

+2

我明白,你可能在你自己的心靈一直不清楚你想要什麼,但在回答問題後改變你的問題有點兒俗氣。我爲@ RHertel的答案添加了一個解決方案(更新後的問題)... –

+0

PS http://thomasleeper.com/Rcourse/Tutorials/NAhandling.html –

回答

2

您還可以使用complete.cases()

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

感謝您注意到錯誤@RHertel – HubertL

1

這裏的另一種可能性:

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

要控制公差NA

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

數據(例如僅排除行至少有2 NA個值):

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

感謝您的改進/改編,@BenBolker – RHertel

0

要更換的NA:

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

我覺得別人回答的第二部分:

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

爲了在使用應用函數的兩個或多個NA刪除行你的問題。回答你的第一部分。

如果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