我想做以下事情。如果行中的一个值为NA
,则将data frame
中行的所有值替换为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
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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