将全部0个值全部replace为NA

我有一些数字列的数据框。 一些行有一个0值,在统计分析中应该被认为是无效的。 什么是最快的方式来取代R中的所有0值为NULL?

replace0到NA:

df[df == 0] <- NA 

没有[<- function:

一个样本dataframedat (无耻复制@ Chase的答案):

 dat xy 1 0 2 2 1 2 3 1 1 4 2 1 5 0 0 

可以使用is.na<-函数将零replace为NA

 is.na(dat) <- !dat dat xy 1 NA 2 2 1 2 3 1 1 4 2 1 5 NA NA 

让我假设你的data.frame是不同数据types的混合,并不是所有的列都需要修改。

只修改第12至18列(总共21列),只要做到这一点

 df[, 12:18][df[, 12:18] == 0] <- NA 
 #Sample data set.seed(1) dat <- data.frame(x = sample(0:2, 5, TRUE), y = sample(0:2, 5, TRUE)) #----- xy 1 0 2 2 1 2 3 1 1 4 2 1 5 0 0 #replace zeros with NA dat[dat==0] <- NA #----- xy 1 NA 2 2 1 2 3 1 1 4 2 1 5 NA NA 

因为有人要求Data.Table版本,因为给定的data.frame解决scheme无法与data.table,我提供下面的解决scheme。

基本上,使用:=运算符 – > DT[x == 0, x := NA]

 library("data.table") status = as.data.table(occupationalStatus) head(status, 10) origin destination N 1: 1 1 50 2: 2 1 16 3: 3 1 12 4: 4 1 11 5: 5 1 2 6: 6 1 12 7: 7 1 0 8: 8 1 0 9: 1 2 19 10: 2 2 40 status[N == 0, N := NA] head(status, 10) origin destination N 1: 1 1 50 2: 2 1 16 3: 3 1 12 4: 4 1 11 5: 5 1 2 6: 6 1 12 7: 7 1 NA 8: 8 1 NA 9: 1 2 19 10: 2 2 40 

只能在数字字段中(即排除诸如因素之类的东西)将NAreplace为0 ,但是它在逐列的基础上工作:

 col[col == 0 & is.numeric(col)] <- NA 

有了这个函数,你可以将它应用到你的整个数据框中:

 changetoNA <- function(colnum,df) { col <- df[,colnum] if (is.numeric(col)) { #edit: verifying column is numeric col[col == -1 & is.numeric(col)] <- NA } return(col) } df <- data.frame(sapply(1:5, changetoNA, df)) 

尽pipe可以用数据框中的列数replace1:5 ,也可以用1:ncol(df)replace。