可能重复:
在R中将NA设置为0
我有一个data.frame,其中一列有NA值.我想更换NA同0或任何其他值.我尝试了很多线程和方法,但它没有给我结果.我尝试了以下方法.
a$x[a$x==NA]<-0;
a[,c("x")]<-apply(a[,c("x")],1,function(z){replace(z, is.na(z), 0)});
a$x[is.na(a$x),]<-0;
Run Code Online (Sandbox Code Playgroud)
上述方法都没有替换为data.frame NA列x中的0 a.为什么?
the*_*mel 64
既然没人至今认为适合指出为什么你想什么不工作:
NA == NA它不返回TRUE,它返回NA(因为与未定义的值比较应该产生一个未定义的结果).apply原子矢量.您不能使用apply循环遍历列中的元素.a$x,这就是列(一个原子向量).我要修好3.去 a$x[is.na(a$x)] <- 0
首先,这里是一些示例数据:
set.seed(1)
dat <- data.frame(one = rnorm(15),
two = sample(LETTERS, 15),
three = rnorm(15),
four = runif(15))
dat <- data.frame(lapply(dat, function(x) { x[sample(15, 5)] <- NA; x }))
head(dat)
# one two three four
# 1 NA M 0.80418951 0.8921983
# 2 0.1836433 O -0.05710677 NA
# 3 -0.8356286 L 0.50360797 0.3899895
# 4 NA E NA NA
# 5 0.3295078 S NA 0.9606180
# 6 -0.8204684 <NA> -1.28459935 0.4346595
Run Code Online (Sandbox Code Playgroud)
这是我们的替代品:
dat[["four"]][is.na(dat[["four"]])] <- 0
head(dat)
# one two three four
# 1 NA M 0.80418951 0.8921983
# 2 0.1836433 O -0.05710677 0.0000000
# 3 -0.8356286 L 0.50360797 0.3899895
# 4 NA E NA 0.0000000
# 5 0.3295078 S NA 0.9606180
# 6 -0.8204684 <NA> -1.28459935 0.4346595
Run Code Online (Sandbox Code Playgroud)
或者,您当然可以写作 dat$four[is.na(dat$four)] <- 0