Вот некоторые решения, которые не требуют каких-либо пакетов. Все они производят data.frame с столбцом класса "Date"
, за которым следуют числовые столбцы за год, месяц и день. (Вход используется в воспроизводимой форме дается в примечании в конце.)
1) POSIXlt Сначала преобразовать Date
столбец "Date"
класса давая date
, а затем к unclassed "POSIXlt"
объекта дает lt
. Теперь обрывать элементы lt
надлежащим образом:
date <- as.Date(as.character(DF$Date), format = "%Y%m%d")
lt <- unclass(as.POSIXlt(date))
with(lt, data.frame(Date = date, year = year + 1900, month = mon + 1, day = mday))
подача: Формат
Date year month day
1 2013-01-01 2013 1 1
2 2013-01-02 2013 1 2
3 2013-01-03 2013 1 3
4 2013-01-04 2013 1 4
2)
data.frame(date = as.Date(as.character(DF$Date), format = "%Y%m%d"),
year = as.numeric(format(date, "%Y")),
month = as.numeric(format(date, "%m")),
day = as.numeric(format(date, "%d")))
давая:
date year month day
1 2013-01-01 2013 1 1
2 2013-01-02 2013 1 2
3 2013-01-03 2013 1 3
4 2013-01-04 2013 1 4
3) по математике
with(DF, data.frame(date = as.Date(as.character(DF$Date), format = "%Y%m%d"),
year = Date %/% 10000,
month = Date %% 10000 %/% 100,
day = Date %% 100))
давая:
date year month day
1 2013-01-01 2013 1 1
2 2013-01-02 2013 1 2
3 2013-01-03 2013 1 3
4 2013-01-04 2013 1 4
4) read.fwf
data.frame(date = as.Date(as.character(DF$Date), format = "%Y%m%d"),
read.fwf(textConnection(as.character(DF$Date)), c(4, 2, 2),
col.names = c("year", "month", "day")))
давая:
date year month day
1 2013-01-01 2013 1 1
2 2013-01-02 2013 1 2
3 2013-01-03 2013 1 3
4 2013-01-04 2013 1 4
5) sub/read.Таблица
давая:
date year month day
1 2013-01-01 2013 1 1
2 2013-01-02 2013 1 2
3 2013-01-03 2013 1 3
4 2013-01-04 2013 1 4
Примечание: вход используется, "DF"
, в воспроизводимая форма:
DF <- data.frame(Date = 20130101:20130104)
'tstrsplit' расщепляется на существующих символов в строке. Я думаю, что вы хотите либо '? Strptime', либо'? As.IDate', который будет анализировать дату; или '? substr', который позволит вам выбрать подстроки. – Frank