2014-08-31 208 views
1

我想将空格(无值)更改为缺少(NA)。我以为这当R读取数据(在我的情况CSV)自动发生的,但也有只是空白,所以我尝试:如何用NA代替空白字符串?

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

我也试过:

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

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

+1

它工作在我创建的示例数据。没有使用'dput'的例子,很难知道问题。 – akrun 2014-08-31 18:21:07

+1

对于'data <-c(“ok”,“”,“good”)''然后运行'is.na(data)< - data ==“”''好像工作得很好。你确定这是个问题吗?也许你的“空白”是空格? – MrFlick 2014-08-31 18:22:05

+1

@HiThere你可以在'read.csv'中使用'na.strings ='''' – akrun 2014-08-31 18:26:23

回答

3

要说明的是代码的工作:

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> 
+0

这是非常有益的thx – Mamba 2014-08-31 18:49:51

7

试试这个:

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

结果:

[1] "a" NA "b" NA "1" 
+0

命令已被接受。空白仍然存在。 – Mamba 2014-08-31 18:27:37

+0

我使用了一个示例数据。你的命令工作得很好。但是原始数据只是卡住了。 – Mamba 2014-08-31 18:29:24

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