我希望在使用NA
时将逗号分隔数据集中的缺失观察结果转换为read.csv
。我认为这是一项微不足道的任务。但是,当我阅读下面的数据集时,NA
&#39}没有出现在最后一列中。
此处提出了类似的问题:Change the Blank Cells to "NA"
当我使用其他帖子中建议的解决方案时,我得到了预期的结果(如下所示)。但是,我不明白为什么我的原始代码(也显示在下面)不起作用。为什么我甚至需要使用另一篇文章中建议的解决方案?换句话说,为什么:
is.na(my.data$my.method[1])
返回FALSE
,如下所示?
以下是数据集:
ID,my.date,Ref,Zone,Group,Fruit,Area,Rating,Quality,Age,Sex,my.method
1,14-Aug-2016,SSS,1,2,115,Idaho,4,4,Adult,Unknown,
1,20-Aug-2015,SSS,1,2,144,Ohio,4,3,Adult,Unknown,
2,14-Aug-2012,TTT,1,2,115,Hawaii,4,3,Adult,Male,BBB
3,6-Jun-2015,RRR,1,2,239,Florida,4,3,Adult,Male,BBB
4,26-Jul-2016,SSS,1,1,80,Hawaii,4,4,Adult,Male,AAA
4,1-Aug-2015,GGG,2,1,83,Ohio,4,4,Adult,Male,AAA
5,5-Apr-2015,SSS,2,1,171,Idaho,4,4,Adult,Female,AAA
请注意,当我从此帖子中选择数据集时,在右边的最后一个字符后面似乎有空格,但是在将文本复制并粘贴到Windows计算机上的文本文件后,没有可见空格。我检查过以确保通过复制和粘贴上面的数据来重现我的问题。
这是我的R
代码:
setwd('C:/Users/mmiller/Documents/simple R programs/')
my.data <- read.csv('confusing_NA_sample_data_for_stackoverflow.csv',
header = TRUE, stringsAsFactors = FALSE, na.strings = "NA")
my.data
# ID my.date Ref Zone Group Fruit Area Rating Quality Age Sex my.method
#1 1 14-Aug-2016 SSS 1 2 115 Idaho 4 4 Adult Unknown
#2 1 20-Aug-2015 SSS 1 2 144 Ohio 4 3 Adult Unknown
#3 2 14-Aug-2012 TTT 1 2 115 Hawaii 4 3 Adult Male BBB
#4 3 6-Jun-2015 RRR 1 2 239 Florida 4 3 Adult Male BBB
#5 4 26-Jul-2016 SSS 1 1 80 Hawaii 4 4 Adult Male AAA
#6 4 1-Aug-2015 GGG 2 1 83 Ohio 4 4 Adult Male AAA
#7 5 5-Apr-2015 SSS 2 1 171 Idaho 4 4 Adult Female AAA
my.data$my.method[1]
#[1] ""
is.na(my.data$my.method[1])
#[1] FALSE
my.data$my.method[1] == ''
#[1] TRUE
这就是我的期望:
expected.result <- read.table(text = '
ID my.date Ref Zone Group Fruit Area Rating Quality Age Sex my.method
1 14-Aug-2016 SSS 1 2 115 Idaho 4 4 Adult Unknown NA
1 20-Aug-2015 SSS 1 2 144 Ohio 4 3 Adult Unknown NA
2 14-Aug-2012 TTT 1 2 115 Hawaii 4 3 Adult Male BBB
3 6-Jun-2015 RRR 1 2 239 Florida 4 3 Adult Male BBB
4 26-Jul-2016 SSS 1 1 80 Hawaii 4 4 Adult Male AAA
4 1-Aug-2015 GGG 2 1 83 Ohio 4 4 Adult Male AAA
5 5-Apr-2015 SSS 2 1 171 Idaho 4 4 Adult Female AAA
', header = TRUE)
expected.result
我可以使用以下代码获得预期结果:
my.data <- read.csv('confusing_NA_sample_data_for_stackoverflow.csv',
header = TRUE, stringsAsFactors = FALSE, na.strings = c("", "NA"))
my.data
ID my.date Ref Zone Group Fruit Area Rating Quality Age Sex my.method
1 1 14-Aug-2016 SSS 1 2 115 Idaho 4 4 Adult Unknown <NA>
2 1 20-Aug-2015 SSS 1 2 144 Ohio 4 3 Adult Unknown <NA>
3 2 14-Aug-2012 TTT 1 2 115 Hawaii 4 3 Adult Male BBB
4 3 6-Jun-2015 RRR 1 2 239 Florida 4 3 Adult Male BBB
5 4 26-Jul-2016 SSS 1 1 80 Hawaii 4 4 Adult Male AAA
6 4 1-Aug-2015 GGG 2 1 83 Ohio 4 4 Adult Male AAA
7 5 5-Apr-2015 SSS 2 1 171 Idaho 4 4 Adult Female AAA
但是,如上所述,我不明白为什么:
is.na(my.data$my.method[1])
#[1] FALSE
如果我不使用其他帖子中建议的解决方案。谢谢你的任何解释。