在数据框中查找和替换自定义值

时间:2014-01-26 02:31:18

标签: r replace dataframe na

我有以下数据框,我想要替换所有出现的"Blank(s)"NA

dat <- data.frame(
    "a"=c("Blank(s)", "1", "2", "Blank(s)", <NA>),
    "b"=c("Blank(s)", "1", "2", "Blank(s)", <NA>),
    "c"=c("Blank(s)", "1", "2", "Blank(s)", <NA>),
    "d"=c("Blank(s)", "1", "2", "Blank(s)", <NA>),
    "e"=c("Blank(s)", "1", "2", "Blank(s)", <NA>),
    "f"=c("Blank(s)", "1", "2", "Blank(s)", <NA>)
)

对于NA我已成功找到a wonderful solution by Muhammad Ariz

x <- c(rnorm(5),rep(NA,3),rnorm(5))    # sample data 
dat <- data.frame(x,x)                 # make sample dataframe 
dat2 <- as.matrix(dat)                 # convert to matrix 
y <- which(is.na(dat)==TRUE)           # get index of NA values 
dat2[y] <- "your string"               # replace all NA values 

并且只需使用as.data.frame(dat2)将矩阵再次转换为数据框。

要为"Blank(s)"添加条件,我尝试y <- which(is.na(dat3)==TRUE || dat3=="Blank(s)"),但没有任何事情发生。

我想知道我是否可以组合这些条件,以便下次我可以添加一个字符串,向量或is.函数,就像一个很好的旧的查找和替换机制,即:

y <- which(is.na(dat3)==TRUE || is.character(dat3)==TRUE || 
    is.equal(dat3)=="Blank(s)" || is.equal(dat3)==-1 || ...)

注意:我希望有一个快速执行的功能,因为我的原始数据帧有500,000个观察值和55个变量。

1 个答案:

答案 0 :(得分:2)

尝试在|

中使用单y <- which(is.na(dat3)==TRUE || dat3=="Blank(s)")

所以,

y <- which(is.na(dat3)==TRUE | dat3=="Blank(s)")