我有以下虚拟data.frame:
setseed(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)))
我想知道data.frame包含多少个NA,要么为字符串“ NA”,要么为缺失值NA。 为了进行测试,我运行了以下几行:
print(length(grep("\\<NA\\>", df)))
print(length(which(is.na(df))))
print(length(which(df=="NA")))
将NA引入为缺失值:
df1.na$x1[rbinom(33,1,0.1)==1]<-"NA"
df1.na$x2[rbinom(33,1,0.1)==1]<-NA
df1.na$x3[rbinom(33,1,0.1)==1]<-NA
df1.na$x4[rbinom(33,1,0.1)==1]<-NA
df1.na$x5[rbinom(33,1,0.1)==1]<-NA
与上述相同的行的结果从2到5。Is.na()对于缺少的值可以正常工作。但是字符串匹配似乎已关闭,如下所示:
print(length(grep("\\<NA\\>", df)))
print(length(which(is.na(df))))
print(length(which(df=="NA")))
我希望grep()和“ ==”在寻找字符串“ NA”时返回相同的答案,但是它们差别很大,我也不知道为什么。哪个更好?我注意到对于更大的data.frames(2.000.000x 30)grep()需要很长时间。还有更快的选择吗?
谢谢。
答案 0 :(得分:1)
@override
Widget build(BuildContext context) {
final auth = Provider.of<Auth>(context);
return Container(
child: Text(auth.uid);
);
}
除了速度较慢之外,没有提供您想要的结果。它不提供匹配的像元数,而是给出转换为type:character时匹配print(length(grep("\\<NA\\>", df)))
的列数。
所以
\<NA\>
肯定更好。
要考虑的另一种选择:将字符列转换为数字,然后仅使用print(length(which(df=="NA")))
:
is.na