替换包含字符的数据框中的每个字符串

时间:2017-08-24 17:57:55

标签: r string replace

在下面的测试数据框中,我试图将包含“NA”的数据帧中的每个字符串更改为“”(以便将NAs留空)。

dat <- as.data.frame(matrix(ncol=2, nrow=2))
dat$V1 <- c("  NA", "foo")
dat$V2 <- c("bar", "NA   ")

dat
   V1   V2
1  NA  bar
2 foo NA 

但是,以下命令返回一个完全空白的数据帧,就好像所有字符串都包含“NA”一样。为什么会发生这种情况?什么是正确的解决方案?

value <- "NA"

dat[grepl(value, dat)] <- ""

4 个答案:

答案 0 :(得分:1)

dat <- lapply(dat, function(x) {gsub("NA", "", x)})
dat <- data.frame(dat)

答案 1 :(得分:1)

只需使用gsub

value <- "NA" 

for (i in 1:ncol(dat)) {
  dat[,i] <- gsub(value, "", dat[,i])  
}
dat

答案 2 :(得分:0)

library(data.table)
setDT(dat)

for(j in seq_along(dat)){
  set(dat, i = which(dat[[j]] %like% "NA"), j = j, value = "")
}
      V1  V2
# 1:     bar
# 2: foo  

答案 3 :(得分:0)

也许在你的情况下你最好用矩阵。

datm <- as.matrix(dat)

现在您提出的解决方案有效:

datm[grepl(value, datm)] <- ""

或使用gsub:

datm = gsub("\\s*NA\\s*", "",datm)

您可以在数据清理后将其转换为数据框。