是否可以不在数据框中显示NA?

Ale*_*lex 2 r dataframe na

我正在尝试创建一个data.frame,其中一些单元格缺少值.我不知道是否有任何隐藏NA的方法,而不是显示NA?我想要的就像一个ANOVA表,如下所示.

 x = rnorm(40)    
 y = rep(1:2, each=20)    
 z = rep(c(1,2,1,2), each=10)  
 model1 = lm(x~y * z)  
 model2 = lm(x~y + z)  
 anova(model1, model2)  

 #Analysis of Variance Table
 #Model 1: x ~ y * z
 #Model 2: x ~ y + z
 #Res.Df    RSS Df Sum of Sq      F Pr(>F)
 #1     36 38.931                           
 #2     37 39.248 -1  -0.31705 0.2932 0.5915
Run Code Online (Sandbox Code Playgroud)

输出在上面.如果您尝试访问这些空白单元格,您将获得NA

 anova(model1, model2)[1,4]
 #[1] NA
Run Code Online (Sandbox Code Playgroud)

提前致谢!!

Aar*_*ica 6

print.anova通过使用na.print选项print.default,如下所示:

> x <- matrix(c(101:111/100, NA), nrow=3)
> print(x, na.print="")
     [,1] [,2] [,3] [,4]
[1,] 1.01 1.04 1.07 1.10
[2,] 1.02 1.05 1.08 1.11
[3,] 1.03 1.06 1.09     
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于矩阵,不适用于数据帧.

对于数据框架,用""替换NA的建议是好的,但是丢失了通常的数字印刷; 您可以format.data.frame在更换前使用.阅读print.data.frame函数以获取更多详细信息.这样做,您也可以用NA替换,然后使用na.print选项,如上所述.

> y <- as.data.frame(x)
> m <- as.matrix(format.data.frame(y, digits = NULL, na.encode = FALSE))
> m[is.na(y)] <- NA
> print(m, na.print="", quote=FALSE)
  V1   V2   V3   V4  
1 1.01 1.04 1.07 1.10
2 1.02 1.05 1.08 1.11
3 1.03 1.06 1.09   
Run Code Online (Sandbox Code Playgroud)

看看第四列中的数字是如何排列的?与此相比.

> z <- y
> z[is.na(z)] <- ""
> print(z)
    V1   V2   V3   V4
1 1.01 1.04 1.07  1.1
2 1.02 1.05 1.08 1.11
3 1.03 1.06 1.09     
Run Code Online (Sandbox Code Playgroud)