R 将日期数据(m/d/y)拆分为3列
我需要将日期(m/d/y格式)转换为3个独立的列,我希望在这些列上运行一个算法(我正在尝试将日期转换为朱利安日数)。看到了另一个用户关于使用Oracle将数据分离为多列的建议。我正在使用R,并且完全被困在如何恰当地编写代码的问题上。A1、A2……是否表示我的新列标题,以及“更新集”部分的格式差异是什么R 将日期数据(m/d/y)拆分为3列,r,date,R,Date,我需要将日期(m/d/y格式)转换为3个独立的列,我希望在这些列上运行一个算法(我正在尝试将日期转换为朱利安日数)。看到了另一个用户关于使用Oracle将数据分离为多列的建议。我正在使用R,并且完全被困在如何恰当地编写代码的问题上。A1、A2……是否表示我的新列标题,以及“更新集”部分的格式差异是什么 updateset A1=substr(原1,4), A2=子序列(原始,5,6), A3=子序列(原始,11,6), A4=子序列(原始,17,5); 我正在努力提高我在R方面的技能,但我想不
updateset A1=substr(原1,4),
A2=子序列(原始,5,6),
A3=子序列(原始,11,6),
A4=子序列(原始,17,5);
我正在努力提高我在R方面的技能,但我想不出这一点…非常感谢任何帮助。提前感谢……:) 快速的:
help(Julian)
datetxt <- c("2010-01-02", "2010-02-03", "2010-09-10")
dates <- as.Date(datetxt) ## you could examine these as well
plt <- as.POSIXlt(dates) ## now as POSIXlt types
plt[["year"]] + 1900 ## years are with offset 1900
#[1] 2010 2010 2010
plt[["mon"]] + 1 ## and months are on the 0 .. 11 intervasl
#[1] 1 2 9
plt[["mday"]]
#[1] 2 3 10
df <- data.frame(year=plt[["year"]] + 1900,
month=plt[["mon"]] + 1, day=plt[["mday"]])
df
# year month day
#1 2010 1 2
#2 2010 2 3
#3 2010 9 10
给定一个文本变量x,如下所示:
> x
[1] "10/3/2001"
然后:
将其转换为日期对象。然后,如果您需要:
> julian(as.Date(x,"%m/%d/%Y"))
[1] 11598
attr(,"origin")
[1] "1970-01-01"
提供朱利安日期(相对于1970-01-01)
不要尝试子字符串的事情
有关更多信息,请参见帮助(as.Date)。我使用format()
方法对Date
对象分离R中的日期。使用Dirk的datetext
,我将如何将日期分解为其组成部分:
datetxt <- c("2010-01-02", "2010-02-03", "2010-09-10")
datetxt <- as.Date(datetxt)
df <- data.frame(date = datetxt,
year = as.numeric(format(datetxt, format = "%Y")),
month = as.numeric(format(datetxt, format = "%m")),
day = as.numeric(format(datetxt, format = "%d")))
注意其他几个人所说的话;您可以获得朱利安日期,而无需拆分各种日期组件。我添加这个答案是为了说明如果你需要它来做其他事情,你可以如何进行分解。嗨,加文:另一种方法[使用你的想法]是: 我们将使用的数据框架是oilstocks,它包含与石油和天然气库存随时间变化相关的各种变量。 变量包括:
colnames(stocks)
"bpV" "bpO" "bpC" "bpMN" "bpMX" "emdate" "emV" "emO" "emC"
"emMN" "emMN.1" "chdate" "chV" "cbO" "chC" "chMN" "chMX"
首先要做的事情之一是将emdate字段(一个整数向量)更改为日期向量
realdate<-as.Date(emdate,format="%m/%d/%Y")
类似的结果,我也有日期、日、月、年作为DF以外的独立向量。< /P> < P>将日期(M/D/Y格式)转换成3个独立的列,考虑DF,
df <- data.frame(date = c("01-02-18", "02-20-18", "03-23-18"))
df
date
1 01-02-18
2 02-20-18
3 03-23-18
df为了便于阅读,月份与month.name[plt[[“mon”]]+1]
> df
date year month day
1 2010-01-02 2010 1 2
2 2010-02-03 2010 2 3
3 2010-09-10 2010 9 10
colnames(stocks)
"bpV" "bpO" "bpC" "bpMN" "bpMX" "emdate" "emV" "emO" "emC"
"emMN" "emMN.1" "chdate" "chV" "cbO" "chC" "chMN" "chMX"
realdate<-as.Date(emdate,format="%m/%d/%Y")
> dfdate <- data.frame(date=realdate)
year=as.numeric (format(realdate,"%Y"))
month=as.numeric (format(realdate,"%m"))
day=as.numeric (format(realdate,"%d"))
ostocks<-cbind(dfdate,day,month,year,stocks)
colnames(ostocks)
"date" "day" "month" "year" "bpV" "bpO" "bpC" "bpMN" "bpMX" "emdate" "emV" "emO" "emC" "emMN" "emMX" "chdate" "chV"
"cbO" "chC" "chMN" "chMX"
df <- data.frame(date = c("01-02-18", "02-20-18", "03-23-18"))
df
date
1 01-02-18
2 02-20-18
3 03-23-18
df$date <- as.Date(df$date, format="%m-%d-%y")
df
date
1 2018-01-02
2 2018-02-20
3 2018-03-23
library(lubridate)
df$year <- year(ymd(df$date))
df$month <- month(ymd(df$date))
df$day <- day(ymd(df$date))
df
date year month day
1 2018-01-02 2018 1 2
2 2018-02-20 2018 2 20
3 2018-03-23 2018 3 23