Почему мой код создает NA при разделении данных в R - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь разделить обучающий набор на два набора: обучающий набор и набор проверки. Он разделяет его, но по какой-то причине он удаляет 32 строки из набора проверки и помещает туда NA. В исходном наборе данных не было NA.

Это код:

set.seed(123)
sample <- sample.int(n = nrow(traindata), size = floor(.2*nrow(traindata)), replace = F)
traindata <- traindata[-sample, ] #creating training set
validatiedata  <- traindata[sample, ] #creating validation set

print(traindata)
head(traindata)
tail(traindata)

print(validatiedata)
head(validatiedata)
tail(validatiedata)

Я пробовал использовать другой код для разделения данных:

library(caTools)
set.seed(123)
split = sample.split(traindata, SplitRatio = 0.8)

# Create training and testing sets
train = subset(traindata, split == TRUE)
test = subset(traindata, split == FALSE)

dim(train); dim(test)

head(traindata)
tail(traindata)

head(validatiedata)
tail(validatiedata)

Этот второй код тоже бесполезен. Он неправильно разделяет данные, а также создает NA в проверочном наборе.

Есть предложения?

1 Ответ

1 голос
/ 06 мая 2020

Вы создаете фреймы данных traindata и validatiedata в неправильном порядке:

traindata <- traindata[-sample, ] # Removes rows from traindata
validatiedata  <- traindata[sample, ] # Tries to extract rows that no longer exists, resulting in NA:s

Если вы измените порядок, у вас не будет этой проблемы:

validatiedata  <- traindata[sample, ]
traindata <- traindata[-sample, ]
...