如何用NA替换空字符串?

时间:2014-08-31 18:19:20

标签: r

我想将空格(无值)更改为缺失(NA)。我假设当R读取数据(在我的情况下是csv)时会自动发生这种情况,但是只有空白所以我试过了:

is.na(data) <- data==""

我也尝试过:

data <- read.table("data.csv", header=TRUE, sep=";", na.strings="")
data[data==""] <- NA

但是空白仍然存在。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

试试这个:

x <- c("a", "", "b", "", "1")
x
x[x==""] <- NA
x

结果:

[1] "a" NA  "b" NA  "1"

答案 1 :(得分:4)

显示代码有效:

data <- data.frame( col1= c("", letters[1:4]), col2=c(letters[1:4], ""))
 is.na(data) <- data==''
 data
 #  col1 col2
 #1 <NA>    a
 #2   a    b
 #3    b    c
 #4    c    d
 #5    d <NA>

假设,如果您有''以及空格' ',那么这不会起作用

 data <- data.frame( col1= c("", letters[1:4]), col2=c(letters[1:4], " "))
 data1 <- data
 is.na(data) <- data==''
  data
  col1 col2
 #1 <NA>    a
 #2    a    b
 #3    b    c
 #4    c    d
 #5    d     

在这种情况下,您可以使用str_trim

  library(stringr)
  data1[] <- lapply(data1, str_trim)
  is.na(data1) <- data1==''
  data1
  #  col1 col2
  #1 <NA>    a
  #2    a    b
  #3    b    c
  #4    c    d
  #5    d <NA>

答案 2 :(得分:3)

在阅读数据时只需使用na.strings = "",例如

test1 <- data.frame(A = 1:6, B = c("6","7", "",3, "","7")) # Assuming this is your data
test1
#   A B
# 1 1 6
# 2 2 7
# 3 3  
# 4 4 3
# 5 5  
# 6 6 7

tf <- tempfile() # Creating some temp file for illustration
write.csv(test1, tf, row.names = F) # Saving the dummy data on the hard disk
read.csv(tf, na.strings = "") # Reading it back while specifying na.strings = ""
#   A  B
# 1 1  6
# 2 2  7
# 3 3 NA
# 4 4  3
# 5 5 NA
# 6 6  7