ymd
требует, чтобы это был символьный вектор с порядком дат следующего года, месяца, дня в любом формате, если дата находится в этом порядке. Ваш столбец имеет тип integer и поэтому нарушает эти правила. Поэтому используйте либо as.Date()
из базы, либо as_date()
из lubridate
as.Date(192606)
"2497-05-03"
lubridate::as_date(192606)
"2497-05-03"
Поэтому для ваших данных:
sss[,1] <- as_date(sss[,1])
Если данные не являются цифрами c:
sss[,1] <- as_date(as.numeric(sss[,1]))
Поскольку формат YearMonth, мы можем использовать:
library(zoo)
sss[,1] <- as.yearmon(as.character(sss[,1, drop = T]), "%Y%m")
head(sss[,1])
# A tibble: 6 x 1
Date
<yearmon>
1 Jul 1926
2 Aug 1926
3 Sep 1926
4 Oct 1926
5 Nov 1926
6 Dec 1926
Если sss
- матрица, оберните as.character()
вокруг вызова as.yearmon
. Это связано с тем, что для матрицы все данные должны быть одинаковыми. Когда типы смешаны, все данные преобразуются в факторы. Вот почему вы получаете значения, которые вы делаете. Поэтому преобразуйте столбец в символ, прежде чем данные приведут к фактору.
sss[,1] <- as.character(as.yearmon(as.character(test[,1]), "%Y%m"))
Хотя это работает, вам, вероятно, следует придерживаться фреймов данных при работе с такими данными.