Rreplace数据框中的所有特定值

有一个数据框,我怎么去取代沿着所有行和列的所有特定值。 举个例子,我想用NA来replace所有空的logging(不用input位置):

df <- data.frame(list(A=c("", "xyz", "jkl"), B=c(12, "", 100))) AB 1 12 2 xyz 3 jkl 100 

预期结果:

  AB 1 NA 12 2 xyz NA 3 jkl 100 

喜欢这个:

 > df[df==""]<-NA > df AB 1 <NA> 12 2 xyz <NA> 3 jkl 100 

既然PikkuKatja和glallen要求更一般的解决scheme,我还不能评论,我会写一个答案。 您可以结合使用以下语句:

 > df[df=="" | df==12] <- NA > df AB 1 <NA> <NA> 2 xyz <NA> 3 jkl 100 

对于因素,zxzak的代码已经产生了一些因素:

 > df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100))) > str(df) 'data.frame': 3 obs. of 2 variables: $ A: Factor w/ 3 levels "","jkl","xyz": 1 3 2 $ B: Factor w/ 3 levels "","100","12": 3 1 2 

如果遇到麻烦,我build议暂时放弃这些因素。

 df[] <- lapply(df, as.character) 

我们可以使用data.table来快速获取它。 首先创builddf没有因素,

 df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)), stringsAsFactors=F) 

现在你可以使用

 setDT(df) for (jj in 1:ncol(df)) set(df, i = which(df[[jj]]==""), j = jj, v = NA) 

你可以把它转换回data.frame

 setDF(df) 

如果您只想使用data.frame并保留因素更加困难,则需要使用

 levels(df$value)[levels(df$value)==""] <- NA 

其中value是每列的名称。 您需要将其插入到循环中。

如果要replace数据框中的多个值,则循环遍历所有列可能会有所帮助。

假设你想replace""100

 na_codes <- c(100, "") for (i in seq_along(df)) { df[[i]][df[[i]] %in% na_codes] <- NA }