我有一个数据帧和一些列有NA值。

我如何将这些NA值替换为零?


当前回答

在data.frame中,不需要通过突变来创建新列。

library(tidyverse)    
k <- c(1,2,80,NA,NA,51)
j <- c(NA,NA,3,31,12,NA)
        
df <- data.frame(k,j)%>%
   replace_na(list(j=0))#convert only column j, for example
    

结果

k   j
1   0           
2   0           
80  3           
NA  31          
NA  12          
51  0   

其他回答

要替换一个数据帧中的所有NAs,你可以使用:

Df %>% replace(is.na(.), 0)

对于单个向量:

x <- c(1,2,NA,4,5)
x[is.na(x)] <- 0

对于data.frame,在上面的基础上创建一个函数,然后将其应用到列上。

下次请提供一个可重复的例子,具体如下:

如何制作一个优秀的R可复制示例?

如果我们试图在导出时替换NAs,例如写入csv时,那么我们可以使用:

  write.csv(data, "data.csv", na = "0")

如果你想在因子变量中替换NAs,这可能是有用的:

n <- length(levels(data.vector))+1

data.vector <- as.numeric(data.vector)
data.vector[is.na(data.vector)] <- n
data.vector <- as.factor(data.vector)
levels(data.vector) <- c("level1","level2",...,"leveln", "NAlevel") 

它将因子向量转换为数值向量,并添加另一个人工数值因子水平,然后将其转换回具有您选择的额外“na水平”的因子向量。

一个简单的方法是用if_na from hablar:

library(dplyr)
library(hablar)

df <- tibble(a = c(1, 2, 3, NA, 5, 6, 8))

df %>% 
  mutate(a = if_na(a, 0))

返回:

      a
  <dbl>
1     1
2     2
3     3
4     0
5     5
6     6
7     8