2014-08-31 66 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 
相關問題