Каждая из этих альтернатив принимает входной вектор и выдает вектор в качестве выходного.
Вывод даты
Все они будут принимать вектор в качестве входного и выводят вектор Date
в качестве выходного.
# 1. replace first occurrence of '00 ' with '01 ' and then convert to Date
as.Date(sub("00 ", "01 ", date1))
## [1] "1971-02-01" "1979-06-01"
# 2. convert to yearmon class and then to Date
library(zoo)
as.Date(as.yearmon(date1, "%Y-%m"))
## [1] "1971-02-01" "1979-06-01"
# 3. insert a 1 and then convert to Date
as.Date(paste(1, date1), "%d %Y-%m")
## [1] "1971-02-01" "1979-06-01"
годовой вывод
Обратите внимание, что если вы действительно пытаетесь представить только месяцы и годы, тогда класс yearmon
напрямую представляет такие объекты без использования неиспользованного дня месяца,Такие объекты внутренне представлены как год плюс часть года, то есть год + 0 для января, год + 1/12 для февраля и т. Д. Они отображаются значимым образом, они сортируются ожидаемым образом и ими можно манипулировать,например, взять разницу между двумя такими объектами или добавить 1/12, чтобы получить следующий месяц, и т. д. Как и в случае с другими, он принимает вектор и производит вектор.
library(zoo)
as.yearmon(date1, "%Y-%m")
## [1] "Feb 1971" "Jun 1979"
символьный вывод
Если вы хотите получить character
вместо Date
или yearmon
, тогда эти варианты сработают и снова примут вектор в качестве входных данных и создадут вектор в качестве выходных:
# 1. replace -00 and everything after that with a string having 0 characters
sub("-00.*", "", date1)
## [1] "1971-02" "1979-06"
# 2. convert to yearmon and then format that
library(zoo)
format(as.yearmon(date1, "%Y-%m"), "%Y-%m")
## [1] "1971-02" "1979-06"
# 3. convert to Date class and then format that
format(as.Date(paste(1, date1), "%d %Y-%m"), "%Y-%m")
## [1] "1971-02" "1979-06"
# 4. pick off the first 7 characters
substring(date1, 1, 7)
## [1] "1971-02" "1979-06"