2014-12-07 84 views
0

我想執行以下操作。如果該行中的一個值爲NA,則將data frame中的某行的所有值替換爲NA。例如:R:如果一個值爲NA,則將所有行值設爲NA

df <- data.frame(id=c(NA,20,30,40,NA,60), value=c(15,NA,35,45,55,65)) 

輸出將

id value 
1 NA NA 
2 NA NA 
3 30 35 
4 40 45 
5 NA NA 
6 60 65 

回答

2

您可以嘗試

df[!!rowSums(is.na(df)),] <- NA 
df 
# id value 
#1 NA NA 
#2 NA NA 
#3 30 35 
#4 40 45 
#5 NA NA 
#6 60 65 

或者

df[with(df, is.na(id)|is.na(value)),] <- NA 
1

如果你習慣使用apply功能:

R>df[ apply(is.na(df), 1, any), ] <- NA 
R>df 
    id value 
1 NA NA 
2 NA NA 
3 30 35 
4 40 45 
5 NA NA 
6 60 65 
3

除了別人已經發布,你可以使用complete.cases功能:

df <- data.frame(id = c(NA, 20, 30, 40, NA, 60), 
       value = c(15, NA, 35, 45, 55, 65)) 
complete.cases(df) 
## [1] FALSE FALSE TRUE TRUE FALSE TRUE 
df[complete.cases(df), ] 
## id value 
## 3 30 35 
## 4 40 45 
## 6 60 65 

,你可以設置不完整的行NA

df[!complete.cases(df), ] <- NA 
df 
## id value 
## 1 NA NA 
## 2 NA NA 
## 3 30 35 
## 4 40 45 
## 5 NA NA 
## 6 60 65