2017-08-24 55 views
0

我在R中有三個數據表。每個表都有一個日期列。表格是vix_data,gold_ohlc_data,btc_ohlc_data。他們的格式如下:修復日期格式在R

head(vix_data$Date) 
[1] 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04 
3435 Levels: 1/10/05 1/10/06 1/10/07 1/10/08 1/10/11 ... 9/9/16 

head(gold_ohlc_data$date) 
[1] 8/23/17 8/22/17 8/21/17 8/18/17 8/17/17 8/16/17 
2519 Levels: 1/10/08 1/10/11 1/10/12 1/10/13 1/10/14 ... 9/9/16 

head(btc_ohlc_data$Date) 
[1] "2017-08-23" "2017-08-22" "2017-08-21" "2017-08-20" "2017-08-19" 
[6] "2017-08-18" 

我怎樣才能更改vix_datagold_ohlc_data表日期列以匹配btc_ohlc_data格式?我已經嘗試了幾種方法,例如使用as.Date來轉換每一列 - 但這通常會使值增大並插入大量的N/A。

+0

在'vix_data $ Date',哪一個是天,哪一個是一個月? – www

回答

1

一種選擇是使用功能,從包lubridate。用戶需要知道哪一個是天,哪一個是一個月來選擇使用合適的功能,如dmymdy

# Load package 
library(lubridate) 

# Create example string 
date1 <- c("1/2/04", "1/5/04", "1/6/04", "1/7/04", "1/8/04", "1/9/04") 
date2 <- c("8/23/17", "8/22/17", "8/21/17", "8/18/17", "8/17/17", "8/16/17") 

# Convert to date class 
dmy(date1) 
# [1] "2004-02-01" "2004-05-01" "2004-06-01" "2004-07-01" "2004-08-01" "2004-09-01" 
mdy(date1) 
# [1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08" "2004-01-09" 
mdy(date2) 
# [1] "2017-08-23" "2017-08-22" "2017-08-21" "2017-08-18" "2017-08-17" "2017-08-16" 
0

查看軟件包lubridatelubridate::dmy()ymd()應該處理這個很好。

0

看起來你的數據是作爲因素讀取的,所以首先你必須將它們改爲字符。然後,您可以將其轉換爲日期並指定輸入格式,其中%m代表數字月份,%d代表當天,%y代表2位數年份。

x <- c('1/2/04', '1/5/04', '1/6/04', '1/7/04', '1/8/04', '1/9/04') 
y <- as.Date(x, format = "%m/%d/%y") 
y 
[1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08" 
[6] "2004-01-09" 
0

您確定您指定的as.Date正確嗎?例如,你有%y,而不是%Y

我做了以下內容和它的工作:

> vix <- c("1/2/04", "1/5/04", "1/6/04", "1/7/04", "1/8/04", "1/9/04") 
> vix<- as.factor(vix) 
> vix 
[1] 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04 
Levels: 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04 
> as.Date(vix, "%m/%d/%y") 
[1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08" "2004-01-09"