Подмножество в R, похоже, не работает: значение строк с указанными c значениями для подмножества - PullRequest
2 голосов
/ 10 апреля 2020

У меня есть набор данных поезда.

train$date<- ydm(train$date) #from format year-date-month
train$item<- as.factor(as.character(train$item))
train$store<- as.factor(as.character(train$store))
train$yearmonth <- format(as.Date(train$date), "%Y%m")
head(train)

date store item sales yearmonth
1 2013-01-01     1    1    13    201301
2 2013-01-02     1    1    11    201301
3 2013-01-03     1    2    14    201301
4 2013-01-04     1    1    13    201301
5 2013-01-05     1    1    10    201301
6 2013-01-06     1    2    12    201301

Теперь я просто wi sh вычисляю строки, для которых хранилище id = 1, но я не могу этого достичь.

train_1 <- subset(train, train$store==1)

train_1 имеет точное число строк как поезд, чего не должно было быть.

Немного о структуре после всех операций

sapply(train,class)
       date       store        item       sales 
     "Date"    "factor"    "factor"   "integer" 
  yearmonth 
"character" 

1 Ответ

1 голос
/ 10 апреля 2020

Может быть, есть пробелы в начале / отстаивании, а также класс factor. Таким образом, можно либо обрезать пробелы с помощью trimws

train_1 <- subset(train, trimws(store) == 1)

, либо преобразовать в character и подмножество

train_1 <- subset(train, as.character(store) == '1') 

, либо использовать grepl

train_1 <- subset(train, grepl('1', store))

Обновление

Подмножество удалило 90% строк именно с 913000 до 91300. В числах была путаница.


Использование набора данных OP

train <- read.csv(file.choose())
str(train)
#'data.frame':  913000 obs. of  4 variables:
# $ date : Factor w/ 1826 levels "2013-01-01","2013-01-02",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ store: int  1 1 1 1 1 1 1 1 1 1 ...
# $ item : int  1 1 1 1 1 1 1 1 1 1 ...
# $ sales: int  13 11 14 13 10 12 10 9 12 9 ...
train_y <- subset(train, store == 1)
dim(train_y)
#[1] 91300     4
unique(train_y$store)
#[1] 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...