我正在尝试创建一个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)
提前致谢!!
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)