Почему 0 читаются R как NA? - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю над созданием некоторых правил связывания для моего набора данных CatalogSales.csv.

Я использовал тот же код в другом наборе данных без проблем, и единственное, что я могу найти, что отличается от этого набора данных, это то, что R распознает значения 0 как NA. Я могу найти множество учебных пособий о том, как превратить значение NA в 0, но я не знаю, почему эти 0 распознаются как NA и как их лучше исправить.

Вот код в полном объеме. Обратите внимание, что я опускаю столбцы с NA в разделе о создании гистограммы.

> cross.sell <- read.csv("CatalogCrossSell.csv")
> head(cross.sell)
  Customer.Number Clothing.Division Housewares.Division
1           11569                 0                   1
2           13714                 0                   1
3           46391                 0                   1
4           67264                 0                   0
5           67363                 0                   0
6           72553                 0                   1
  Health.Products.Division Automotive.Division Personal.Electronics.Division
1                        1                   1                             1
2                        1                   1                             1
3                        1                   1                             1
4                        1                   1                             1
5                        1                   0                             1
6                        1                   1                             1
  Computers.Division Garden.Division Novelty.Gift.Division Jewelry.Division  X
1                  0               0                     1                0 NA
2                  0               1                     1                1 NA
3                  0               1                     1                1 NA
4                  0               1                     1                0 NA
5                  0               1                     1                0 NA
6                  0               1                     1                1 NA
  X.1 X.2 X.3 X.4 X.5 X.6 X.7 X.8 X.9
1  NA  NA  NA  NA  NA  NA  NA  NA  NA
2  NA  NA  NA  NA  NA  NA  NA  NA  NA
3  NA  NA  NA  NA  NA  NA  NA  NA  NA
4  NA  NA  NA  NA  NA  NA  NA  NA  NA
5  NA  NA  NA  NA  NA  NA  NA  NA  NA
6  NA  NA  NA  NA  NA  NA  NA  NA  NA
> dim(cross.sell)
[1] 60004    20
> nrow(cross.sell)
[1] 60004
> is.data.frame(cross.sell)
[1] TRUE
> table(is.na(cross.sell))

  FALSE    TRUE 
  49980 1150100
> 
> 
> #View individual item names
> t(t(names(cross.sell)))
      [,1]                           
 [1,] "Customer.Number"              
 [2,] "Clothing.Division"            
 [3,] "Housewares.Division"          
 [4,] "Health.Products.Division"     
 [5,] "Automotive.Division"          
 [6,] "Personal.Electronics.Division"
 [7,] "Computers.Division"           
 [8,] "Garden.Division"              
 [9,] "Novelty.Gift.Division"        
[10,] "Jewelry.Division"             
[11,] "X"                            
[12,] "X.1"                          
[13,] "X.2"                          
[14,] "X.3"                          
[15,] "X.4"                          
[16,] "X.5"                          
[17,] "X.6"                          
[18,] "X.7"                          
[19,] "X.8"                          
[20,] "X.9"                          
> 
> #Create bar plot to view distribution of sales and remove NA values
> cross.data <- as.matrix(subset(cross.sell[,-c(1, 11:20)]))
> barplot(cross.data, main = "Individual Item Sales")
> dim(cross.data)
[1] 60004     9
> 
> #Check for NA values and class
> table(is.na(cross.data))

 FALSE   TRUE 
 44982 495054 
> sapply(cross.data, class)
   [1] "integer" "integer" "integer" "integer" "integer" "integer" "integer"
   [8] "integer" "integer" "integer" "integer" "integer" "integer" "integer"
 [ reached getOption("max.print") -- omitted 539036 entries ]
> 
> #Create transaction database
> cross.trans <- as(cross.data, "transactions")
Error in if (any(from != 0 & from != 1)) warning("matrix contains values other than 0 and 1! Setting all entries != 0 to 1.") : 
  missing value where TRUE/FALSE needed

Будем благодарны за любые рекомендации. Поскольку я уже опустил столбцы 11:20, у меня не должно быть никаких значений NA, но я, очевидно, даю, и когда я go супер старая школа и складываю количество значений NA = False и NA = True, я получаю одно и то же число значений в качестве общей суммы в моей базе данных, так что я знаю, что это потому, что R читает 0 как NA, но я не знаю почему .

Вот первые несколько запрашиваемых строк:

> readLines("CatalogCrossSell.csv", n=4)
[1] "Customer Number,Clothing Division,Housewares Division,Health Products Division,Automotive Division,Personal Electronics Division,Computers Division,Garden Division,Novelty Gift Division,Jewelry Division,,,,,,,,,,"
[2] "000011569,0,1,1,1,1,0,0,1,0,,,,,,,,,,"                                                                                                                                                                               
[3] "000013714,0,1,1,1,1,0,1,1,1,,,,,,,,,,"                                                                                                                                                                               
[4] "000046391,0,1,1,1,1,0,1,1,1,,,,,,,,,,"

Я уже пытался удалить остальные 10 столбцов, когда создавал подмножество cross.data (в разделе boxplot), но я все еще получал ошибку. Эта часть кода приведена ниже для ясности:

> cross.data <- as.matrix(subset(cross.sell[,-c(1, 11:20)]))

> head(cross.data)
  Clothing.Division Housewares.Division Health.Products.Division
1                 0                   1                        1
2                 0                   1                        1
3                 0                   1                        1
4                 0                   0                        1
5                 0                   0                        1
6                 0                   1                        1
  Automotive.Division Personal.Electronics.Division Computers.Division
1                   1                             1                  0
2                   1                             1                  0
3                   1                             1                  0
4                   1                             1                  0
5                   0                             1                  0
6                   1                             1                  0
  Garden.Division Novelty.Gift.Division Jewelry.Division
1               0                     1                0
2               1                     1                1
3               1                     1                1
4               1                     1                0
5               1                     1                0
6               1                     1                1

Спасибо за вашу помощь - извините за поздний ответ, у меня сейчас много на тарелке, и я впервые У меня была возможность что-нибудь проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...