/ / Разделяне на дата в R - r, дата

Дата разделена на R - r, дата

Имам рамка за данни по следния начин:

Date
20130101
20130102
20130103
20130104

как мога да разделите колона Дата в различна колона? Вече използвах следната функция, но тя не работи:

library(data.table)
setDT(DF)[, tstrsplit(DATE, "/|\s", type.convert = TRUE)]

Отговори:

2 за отговор № 1

Ето някои решения, които не изискват никакви пакети. Всички те създават data.frame с a "Date" колона клас, последвана от числови колони за година, месец и ден. (Входът, използван в възпроизводима форма, е даден в бележката в края.)

1) POSIXlt Първо конвертирайте Date колона до "Date" даване на класове date и след това към некласифициран "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.table

date.ch <- sub("(....)(..)(..)", "\1-\2-\3", DF$Date)
data.frame(date = as.Date(date.ch),
read.table(text = date.ch, col.names = c("year", "month", "day"), sep = "-"))

като:

        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)

0 за отговор № 2

Ако не сте задали за използване data.table можете да използвате следната команда, която включва substr:

x = data.frame("20130101", "20130102", "20130103", "20130104")

y<-data.frame(Year=substr(x[,1],1,4),
Month=substr(x[,1],5,6),
Day=substr(x[,1],7,8))

Ако сте сигурни, че данните ви са в същия формат за целия вектор.


0 за отговор № 3

Можете също да направите това с lubridate

library(dplyr)
library(lubridate)

data =
data_frame(Date = c(20130101, 20130102, 20130103, 20130104) ) %>%
mutate(date =
Date %>%
as.character %>%
ymd,
year = year(date),
month = month(date),
day = day(date))