我具有由具有NA
值的列一個data.frame。我想用0
或其他任何值替換NA
。我已經嘗試了很多線程和方法,但沒有給出結果。我已經嘗試了下面的方法。
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;
無上述方法中x
列替換NA
與0 data.frame a
。爲什麼?
我具有由具有NA
值的列一個data.frame。我想用0
或其他任何值替換NA
。我已經嘗試了很多線程和方法,但沒有給出結果。我已經嘗試了下面的方法。
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;
無上述方法中x
列替換NA
與0 data.frame a
。爲什麼?
既然沒有人至今認爲適合指出爲什麼你正在嘗試不起作用:
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
這裏是我們的更換:
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
或者,你可以,當然,寫dat$four[is.na(dat$four)] <- 0
這件事情工作。感謝很多。如果我在我嘗試的上述方法中遇到錯誤,您能否提出建議? –
僅僅因爲其簡單性而不是您的「替代」解決方案?兩個雙括號的使用是否有優勢? –
@MikePalmice,當然。如果您嘗試以編程方式處理問題(例如,在函數中),則「備選」解決方案將會出現問題。 – A5C1D2H2I1M1N2O1R2T1
你想用'0'中的所有列,或者只列'x'更換'NA'? – A5C1D2H2I1M1N2O1R2T1
@mrdwab:只是列x –