如何将空字符串替换为NA?

3

我希望将空白(无值)更改为缺失值(NA)。我认为当R读取数据(在我的情况下是csv)时,这会自动发生,但实际上只有空白,所以我尝试了以下方法:

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

我也尝试了以下方法:
data <- read.table("data.csv", header=TRUE, sep=";", na.strings="")
data[data==""] <- NA

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

1
它在我创建的示例数据上运行良好。没有使用dput的示例,很难知道问题所在。 - akrun
1
似乎对于 data<-c("ok","","good") 这个输入数据,运行 is.na(data) <- data=="" 能够正常工作。你确定这是个问题吗?或许你的“空值”实际上是空格? - MrFlick
1
@HiThere 你可以在 read.csv 中使用 na.strings='' - akrun
@HiThere 如果数据中有 '' 部分,您可以使用 dput(head(data, 10)) - akrun
1
Try dput(head(data, 100)) - David Arenburg
显示剩余3条评论
3个回答

9

试试这个:

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

结果如下:
[1] "a" NA  "b" NA  "1"

1
我使用了样本数据。你的命令完全没有问题。然而原始数据卡住了。 - Mamba

6
展示代码工作的方法如下:
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>

5

例如,在读取数据时只需使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接