将<NA>设置为空白

May*_*you 27 r na

我有一个NA行的数据帧:

 df = data.frame(c("classA", NA, "classB"), t(data.frame(rep("A", 5), rep(NA, 5), rep("B", 5))))
 rownames(df) <- c(1,2,3)
 colnames(df) <- c("class", paste("Year", 1:5, sep = ""))

 > df
   class Year1 Year2 Year3 Year4 Year5
1 classA     A     A     A     A     A
2   <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
3 classB     B     B     B     B     B
Run Code Online (Sandbox Code Playgroud)

我故意引入了空行(NA行),因为我希望在classA行和classB行之间有一些空格.

现在,我想<NA>用空格替换,以便第二行看起来像一个空行.

我试过了:

 df[is.na(df)] <- ""
Run Code Online (Sandbox Code Playgroud)

 df[df == "NA"] <- ""
Run Code Online (Sandbox Code Playgroud)

但它没有用..

有任何想法吗?谢谢!

Jil*_*ina 36

另一种选择:

df <- sapply(df, as.character) # since your values are `factor`
df[is.na(df)] <- 0
Run Code Online (Sandbox Code Playgroud)

如果你想要空白而不是零

> df <- sapply(df, as.character)
> df[is.na(df)] <- " "
> df
     class    Year1 Year2 Year3 Year4 Year5
[1,] "classA" "A"   "A"   "A"   "A"   "A"  
[2,] " "      " "   " "   " "   " "   " "  
[3,] "classB" "B"   "B"   "B"   "B"   "B"  
Run Code Online (Sandbox Code Playgroud)

如果你想要一个data.frame,那就试试吧 as.data.drame

> as.data.frame(df)
   class Year1 Year2 Year3 Year4 Year5
1 classA     A     A     A     A     A
2                                     
3 classB     B     B     B     B     B
Run Code Online (Sandbox Code Playgroud)


A5C*_*2T1 9

这个答案更像是一个扩展的评论.

你想要做的不是我认为好的做法.R不是,比如Excel,所以做这样的事情只是为了在你的数据中创建视觉分离,这只会让你后来头疼.

如果你真的只关心视觉输出,我可以提出两点建议:

  1. 如果要使用该可视分隔查看数据,请使用na.print参数print.

    print(df, na.print = "")
    #    class Year1 Year2 Year3 Year4 Year5
    # 1 classA     A     A     A     A     A
    # 2                                     
    # 3 classB     B     B     B     B     B
    
    Run Code Online (Sandbox Code Playgroud)
  2. 意识到即使上面也不是最好的建议.通过转换为:获得视觉内容分离:data.framelist

    split(df, df$class)
    # $classA
    #    class Year1 Year2 Year3 Year4 Year5
    # 1 classA     A     A     A     A     A
    # 
    # $classB
    #    class Year1 Year2 Year3 Year4 Year5
    # 3 classB     B     B     B     B     B
    
    Run Code Online (Sandbox Code Playgroud)