Ошибка: замена содержит 1810947 строк, а данные имеют 1810956 (одинаково каждый раз) для данных ученика - PullRequest
0 голосов
/ 13 марта 2019

У меня есть большой фрейм данных в R (данные), состоящий из 23 файлов .gazedata (один для каждого предмета):

filenames <- list.files("~/Desktop/DUT Analyses 2019", pattern = "*.gazedata", full.names = TRUE)
ldf <- lapply(filenames, read_tsv)
data <- do.call("rbind", ldf)

После создания факторов и временных переменных я создаю переменную ученика, основанную напо умолчанию параметры достоверности, собранные eye-tracker:

data$DiameterPupilLeftEye[data$ValidityLeftEye != 0] <- NA
data$DiameterPupilRightEye[data$ValidityRightEye != 0] <- NA
data$pupil = rowMeans(select(data, DiameterPupilLeftEye, DiameterPupilRightEye), na.rm = TRUE)

Теперь мне нужно создать интерполированную переменную зрачка (pupil_inter), чтобы интерполировать значения до максимального промежутка 4:

data$pupil_inter<- na.approx(data$pupil, rule = 2, maxgap = 4)

Однако возникает следующая ошибка:

Error in `$<-.data.frame`(`*tmp*`, pupil_inter, value = c(4.2120165, 4.20966425,  : 


replacement has 1810947 rows, data has 1810956

Эти суммы строк всегда одинаковы.

Важно, если я исключу предметы 22 и 23.файлы gazedata из предварительной обработки, последний код работает, и нет ошибки

Я попытался определить существующую проблему «замена имеет [x] строк, у данных есть [y]»чтобы помочь с моей конкретной проблемой, но не могу найти соответствующее решение.Все файлы .gazedata были собраны с использованием одного и того же оборудования и программного обеспечения.

Ошибка сохраняется, даже если сначала успешно создается нулевая переменная pupil_inter, используя следующий код:

data$pupil_inter <- NA

Заранее спасибоза любой предложенный совет.

1 Ответ

0 голосов
/ 14 марта 2019

Ошибка возникает из-за того, что функция na.approx() возвращает меньше строк, чем вы передаете, поэтому вы пытаетесь добавить столбец с 1810 947 строками к кадру данных с 1810 956 строками. Взглянув на документацию для na.approx(), я вижу, что есть параметр na.rm. Если это правда (что по умолчанию), он удалит NAs из возвращенного значения, и у вас будет меньше строк, чем вы начали. Если вы установите значение false, будет возвращено NAs, и вы должны иметь такое же количество строк. Попробуйте это:

data$pupil_inter<- na.approx(data$pupil, rule = 2, maxgap = 4, na.rm = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...