R 用空白(空字符串)替换缺少的值(NA)

R 用空白(空字符串)替换缺少的值(NA),r,na,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

我有一个带有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
df=data.frame(c(“classA”,NA,“classB”),t(data.frame(rep(“A”,5),rep(NA,5),rep(“B”,5)))
行名(df)另一种选择:

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

这个答案更像是一个延伸的评论

你想做的不是我想做的好事。比如说,R不是Excel,所以做这样的事情只是为了在数据中创建可视的分离,这会让你以后感到头疼

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

  • 当您希望以该视觉分隔查看数据时,请使用
    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
    
  • 要意识到,即使是上述建议也不是最好的建议。通过将
    数据.frame
    转换为
    列表
    ,实现视觉和内容的分离:

    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
    

  • 你的第一次尝试对我来说很好。那它不起作用呢?我仍然在数据帧中看到,代码似乎没有影响任何与因素有关的事情(当然!)。。。试试str(df)
    (我对我的答案一语道破!)顺便说一句,不要只说“它没用”。您忽略了在运行该代码时肯定会收到的六条(!)警告消息。警告信息应该非常具有启发性,你不认为吗?
    周围的括号表示它们不是字符串。更多信息。我认为“”是空格,而“”是空白。我说得对吗?
    > 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"  
    
    > 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
    
    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
    
    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