【发布时间】:2014-02-16 23:54:45
【问题描述】:
我有以下数据框,我想替换所有出现的 "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 个变量。
【问题讨论】:
-
尝试在
y <- which(is.na(dat3)==TRUE || dat3=="Blank(s)")中使用单个| -
@Ananta,你能回答一下吗?它工作得很好,我想感谢你:D