通过R中的ID标识数据帧中的任何NA

通过R中的ID标识数据帧中的任何NA,r,dataframe,na,R,Dataframe,Na,如果我有一个像这样的数据框 df <- data.frame(ID = c("12","12","12","13","13","14","14"), Q1 = c(NA,"b",NA,"b",NA,"a","a"), Q2 = c(NA,"a",NA

如果我有一个像这样的数据框

df <- data.frame(ID = c("12","12","12","13","13","14","14"), 
Q1 = c(NA,"b",NA,"b",NA,"a","a"), 
Q2 = c(NA,"a",NA,"b",NA,"a","b"), 
Q3 = c(NA,"a",NA,"a",NA,"b","b"))

df使用
rowSums()
尝试这种
base R
方法,以计算
NA
的数量。之后,
which()
用于标识行:

#Code
df[which(rowSums(is.na(df[,-1]))>0),]
输出:

  ID   Q1   Q2   Q3
1 12 <NA> <NA> <NA>
3 12 <NA> <NA> <NA>
5 13 <NA> <NA> <NA>
[1] "12" "13"
输出:

  ID   Q1   Q2   Q3
1 12 <NA> <NA> <NA>
3 12 <NA> <NA> <NA>
5 13 <NA> <NA> <NA>
[1] "12" "13"

您也可以使用完全符合您需要的
complete.case
的否定:

一种逻辑向量,指定在整个序列中哪些观察值/行没有缺失值

df[1]“12”“12”“13”
微基准:微基准(df[which(is.na(df[,-1]))>0),1],df[!complete.cases(df),1])
#>单位:微秒
#>expr最小lq平均uq最大中值
#>df[which(rowSums(is.na(df[,-1]))>0,1]30.031.236.60031.732.5249.4
#>df[!完整案例(df),1]7.27.8 9.345 8.18.5 39.9
#>内瓦尔cld
#>100 b
#>100 a
由(v0.3.0)于2020年9月10日创建

速度也快了四倍