我有一个数据帧和一些列有NA值。
我如何将这些NA值替换为零?
我有一个数据帧和一些列有NA值。
我如何将这些NA值替换为零?
当前回答
也可以使用tidyr::replace_na。
library(tidyr)
df <- df %>% mutate_all(funs(replace_na(.,0)))
编辑(dplyr > 1.0.0):
df %>% mutate(across(everything(), .fns = ~replace_na(.,0)))
其他回答
如果我们试图在导出时替换NAs,例如写入csv时,那么我们可以使用:
write.csv(data, "data.csv", na = "0")
对于单个向量:
x <- c(1,2,NA,4,5)
x[is.na(x)] <- 0
对于data.frame,在上面的基础上创建一个函数,然后将其应用到列上。
下次请提供一个可重复的例子,具体如下:
如何制作一个优秀的R可复制示例?
专用函数nafill和setnafill,用于此目的,在data.table中。 只要可用,它们就将列分发到多个线程上进行计算。
library(data.table)
ans_df <- nafill(df, fill=0)
# or even faster, in-place
setnafill(df, fill=0)
如果您想在更改特定列(本例中为列V3)中的NAs后分配一个新名称,也可以这样做
my.data.frame$the.new.column.name <- ifelse(is.na(my.data.frame$V3),0,1)
也可以使用tidyr::replace_na。
library(tidyr)
df <- df %>% mutate_all(funs(replace_na(.,0)))
编辑(dplyr > 1.0.0):
df %>% mutate(across(everything(), .fns = ~replace_na(.,0)))