【问题标题】:Do not print NA when printing data frame打印数据框时不打印NA
【发布时间】:2013-10-31 05:32:28
【问题描述】:

对于data frames,没有na.print option。是否有任何解决方法来抑制 NA 的显示?

示例数据框:

df <- data.frame(
       x=c("a","b","c","d"),
       a=c(1,1,1,1),
       b=c(1,1,1,NA),
       c=c(1,1,NA,NA),
       d=c(1,NA,NA,NA))      
df

结果:

  x a  b  c  d
1 a 1  1  1  1
2 b 1  1  1 NA
3 c 1  1 NA NA
4 d 1 NA NA NA

但我想展示:

  x a  b  c  d
1 a 1  1  1  1
2 b 1  1  1
3 c 1  1
4 d 1

【问题讨论】:

  • 警告:确保您和您的读者都不会被误导,认为空白位置要么是“什么都没有”,要么是“零”(Excel 很乐意这样做)。如果这纯粹是为了发表,很好;否则要小心。

标签: r na output-formatting


【解决方案1】:

您可以用"" 替换缺失值(此技术用于print.dist S3 方法)

cf <- format(dat) ## use format to set other options like digits, justify , ...
cf[is.na(dat)] <- ""
 cf
  x a  b  c  d
1 a 1  1  1  1
2 b 1  1  1   
3 c 1  1      
4 d 1    

【讨论】:

    【解决方案2】:

    有,但您必须先强制​​转换为矩阵...

    print( as.matrix(df) , na.print = "" , quote = FALSE )
         x a b  c  d 
    [1,] a 1  1  1  1
    [2,] b 1  1  1   
    [3,] c 1  1      
    [4,] d 1 
    

    如果你愿意,可以把它变成一个小功能......

    nona <- function(x){
        print( as.matrix(x) , na.print = "" , quote = FALSE )
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用write.table:

      write.table(dfr,sep="\t",col.names=NA,na="")
      ""      "x"     "a"     "b"     "c"     "d"
      "1"     "a"     1       1       1       1
      "2"     "b"     1       1       1       
      "3"     "c"     1       1               
      "4"     "d"     1   
      

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 2018-11-17
        相关资源
        最近更新 更多