使用read.csv

时间:2017-06-13 19:35:06

标签: r csv na

我希望在使用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

如果我不使用其他帖子中建议的解决方案。谢谢你的任何解释。

0 个答案:

没有答案