不同的结果grep()和==&引用;

不同的结果grep()和==&引用;,r,regex,string,match,R,Regex,String,Match,我有以下虚拟data.frame: set.seed(666) df<-data.frame(ID=rep(c("A","B","C"),each=11),Year=rep(2010:2020,each=1,3),x1=floor(runif(33,0,10)),x2=floor(runif(33,0,2)), x3=floor(runif(33,1,100)),x4=floor(runif(

我有以下虚拟data.frame:

set.seed(666)
df<-data.frame(ID=rep(c("A","B","C"),each=11),Year=rep(2010:2020,each=1,3),x1=floor(runif(33,0,10)),x2=floor(runif(33,0,2)),
                   x3=floor(runif(33,1,100)),x4=floor(runif(33,1,100)),x5=floor(runif(33,1,100)))
set.seed(666)

df除了速度较慢之外,
打印(长度(grep(“\\”,df))
也不会给出您想要的结果。它给出的不是匹配的单元格数,而是转换为类型:character,match
\
时的列数

所以

肯定更好

附录:@onyanbu在下面的评论中指出,使用sum比使用打印长度更简单。这给出了NA或“NA”单元格的总数,例如

谢谢我认为grep()会为每个包含True和false的列返回一个向量。但是我不会用它来完成这个任务。只要用
sum(is.na(df))
print(length(grep("\\<NA\\>", df)))
print(length(which(is.na(df))))
print(length(which(df=="NA")))
df$x1[rbinom(33,1,0.1)==1]<-"NA"
df$x2[rbinom(33,1,0.1)==1]<-NA
df$x3[rbinom(33,1,0.1)==1]<-NA
df$x4[rbinom(33,1,0.1)==1]<-NA
df$x5[rbinom(33,1,0.1)==1]<-NA
print(length(grep("\\<NA\\>", df)))
print(length(which(is.na(df))))
print(length(which(df=="NA")))

print(length(which(df=="NA")))
sum(is.na(df))
sum(df=="NA")
# total:
sum(is.na(df)|df=="NA")