График, показывающий пустые даты, которые были фактически удалены - PullRequest
0 голосов
/ 02 марта 2020

У меня есть данные для акций, которые я сократил в R, но когда я go построю график, график все еще показывает пустые значения и даты, которые я удалил. Я также пытался заставить R прочитать мой столбец даты как даты, но он не работал. Я заметил проблему с датами, когда я пытался запустить свои АКФ и линейные модели.

> sp<-read.csv(file="~/Desktop/SP500.csv", header=T, sep=",",check.names=FALSE)
> sfshort=sp[1428:2049,]
> plot(sfshort)
> sfshort
           Date   Value
1428 2005-01-07 1186.19
1429 2005-01-14 1184.52
1430 2005-01-21 1167.87
1431 2005-01-28 1171.36
1432 2005-02-04 1203.03
1433 2005-02-11 1205.30
1434 2005-02-18 1201.59
1435 2005-02-25 1211.37
1436 2005-03-04 1222.12
1437 2005-03-11 1200.08
1438 2005-03-18 1189.65
1439 2005-03-24 1171.42
1440 2005-04-01 1172.92
1441 2005-04-08 1181.20
1442 2005-04-15 1142.62

Первые несколько пунктов перечислены выше. Вот код, который я использовал, чтобы попытаться преобразовать столбец даты. Я использовал это в старых проектах, поэтому я не уверен, почему это не работает.

 sfshort <- as.Date(spfshort$Date, "%m/%d/%y")

Дата в моем файле Excel была указана как ММ / ДД / ГГГГ. Вот что я увидел, когда начал работать с линейной моделью.

> lm(sfshort$Value~sfshort$Date)

Call:
lm(formula = sfshort$Value ~ sfshort$Date)

Coefficients:
           (Intercept)  sfshort$Date2005-01-14  sfshort$Date2005-01-21  
               1186.19                   -1.67                  -18.32  
sfshort$Date2005-01-28  sfshort$Date2005-02-04  sfshort$Date2005-02-11  
                -14.83                   16.84                   19.11  

1 Ответ

0 голосов
/ 02 марта 2020

Проблема с графиком возникает из-за того, что ваш столбец Дата наиболее вероятен для класса "factor". Как уже упоминалось в комментариях, вам нужно конвертировать в дату, или даже лучше POSIXlt., Где я рекомендую использовать strptime. (Или сделайте это прямо сейчас, читая данные.)

Вот небольшая демонстрация. Я прочитал в вашем примере текст данных, который похож на то, что делает read.csv. Для сравнения я создам три набора данных sfshort.1, sfshort.2, sfshort.3.

sfshort.1 <- read.table(text=
"          Date   Value
1428 2005-01-07 1186.19
1429 2005-01-14 1184.52
1430 2005-01-21 1167.87
1431 2005-01-28 1171.36
1432 2005-02-04 1203.03
1433 2005-02-11 1205.30
1434 2005-02-18 1201.59
1435 2005-02-25 1211.37
1436 2005-03-04 1222.12
1437 2005-03-11 1200.08
1438 2005-03-18 1189.65
1439 2005-03-24 1171.42
1440 2005-04-01 1172.92
1441 2005-04-08 1181.20
1442 2005-04-15 1142.62")

Теперь, поскольку он не выглядит как целое число или число с плавающей запятой, столбец Date читается в качестве фактора по умолчанию:

str(sfshort.1)
# 'data.frame': 15 obs. of  2 variables:
# $ Date : Factor w/ 15 levels "2005-01-07","2005-01-14",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ Value: num  1186 1185 1168 1171 1203 ...

Коэффициент levels должен быть идентичен unique датам.

identical(unique(as.character(sfshort.1$Date)), levels(sfshort.1$Date))
# [1] TRUE

Давайте удалим первую строку и посмотрим, что произойдет.

sfshort.2 <- sfshort.1[-1, ]
identical(unique(as.character(sfshort.2$Date)), levels(sfshort.2$Date))
# [1] FALSE

Уровни факторов не изменились (и на графике появятся все ).

Теперь давайте преобразуем столбец Date в класс POSIXlt,

sfshort.3 <- transform(sfshort.2, Date=strptime(Date, "%Y-%m-%d"))

str(sfshort.3)
# 'data.frame': 14 obs. of  2 variables:
# $ Date : POSIXlt, format: "2005-01-14" "2005-01-21" "2005-01-28" "2005-02-04" ...  ## <- CHANGED!
# $ Value: num  1185 1168 1171 1203 1205 ...

и нанесите все три версии:

op <- par(mfrow=c(2, 2))
plot(sfshort.1, main="sfshort.1", border=c(2, rep(1, 14)))
plot(sfshort.2, main="sfshort.2")
plot(sfshort.3, main="sfshort.3")
par(op)

enter image description here

Мы можем видеть sfshort.2 все еще показывает "2005-01-07", хотя это был удален В sfshort.3 проблема устранена, и данные правильно распознаются как дата.

Обратите внимание, что в lm вам необходимо снова использовать Date в качестве столбца фактора, выполнив:

lm(Value ~ factor(Date), data=sfshort)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...