我想将空格(无值)更改为缺少(NA
)。我以为这当R读取数据(在我的情况CSV)自动发生的,但也有只是空白,所以我尝试:如何用NA代替空白字符串?
is.na(data) <- data==""
我也试过:
data <- read.table("data.csv", header=TRUE, sep=";", na.strings="")
data[data==""] <- NA
但仍然空白。我该如何解决这个问题?
我想将空格(无值)更改为缺少(NA
)。我以为这当R读取数据(在我的情况CSV)自动发生的,但也有只是空白,所以我尝试:如何用NA代替空白字符串?
is.na(data) <- data==""
我也试过:
data <- read.table("data.csv", header=TRUE, sep=";", na.strings="")
data[data==""] <- NA
但仍然空白。我该如何解决这个问题?
要说明的是代码的工作:
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>
这是非常有益的thx – Mamba 2014-08-31 18:49:51
读取数据时只需使用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
它工作在我创建的示例数据。没有使用'dput'的例子,很难知道问题。 – akrun 2014-08-31 18:21:07
对于'data <-c(“ok”,“”,“good”)''然后运行'is.na(data)< - data ==“”''好像工作得很好。你确定这是个问题吗?也许你的“空白”是空格? – MrFlick 2014-08-31 18:22:05
@HiThere你可以在'read.csv'中使用'na.strings ='''' – akrun 2014-08-31 18:26:23