2015-10-14 42 views
0

更改數據框中的日期格式我想繪製R中的n(y軸)與日期(x軸)的關係圖,但是由於數據中顯示的日期格式,日期的順序不是按照正確的升序排列。我該如何解決這個問題?感謝您的幫助。如何使用R

hybrid <- readWorksheetFromFile(excel.file, sheet="ResultSet", header=TRUE) 
wb <- loadWorkbook(excel.file) 
setMissingValue(wb,value=c("NA")) 
hybrid1 <- readWorksheet(wb, sheet="ResultSet", header=TRUE) 

我使用了dplyr函數。假設每個Pub.Number都有一個唯一的代碼&我用一個代替它。然後,我計算它在某個日期的數量。

hybrid <- mutate(hybrid1, n=sum(Publication.Number=1)) 
p1 <- select(hybrid1, Publication.Date, n) 
pt <- count(p1, Publication.Date, wt=n) 

輸出是這樣的:

pt 
Source: local data frame [627 x 2] 

    Publication.Date  n 
       (chr) (dbl) 
1  01.01.2013  1 
2  01.01.2014  8 
3  01.01.2015 10 
4  01.02.2012  3 
5  01.03.2012 16 
6  01.04.2015  2 
7  01.05.2012  1 
8  01.05.2013  7 
9  01.05.2014 23 
10  01.06.2011  1 
..    ... ... 

然後,我繪製的,但[R公認Pub.Date爲字符

qplot(x=Publication.Date, y=n, data=pt, geom="point") 

x <- hybrid1[,2] 
class(x) 
[1] "character" 

The graph I've plotted is a mess because of the wrong order of the date

我嘗試使用作爲.Date函數,但它似乎不完整(我正在使用R版本3.2.2)

> pt[,1] <- as.Date(pt[,1], format='%d.%m.%Y’) 
+ 
+0

You wan t檢查你如何創建日期對象(例如,as.Date())。這裏是你的[link](https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html)。你可能要考慮使用'scale_x_date()'。信息是[here](http://docs.ggplot2.org/current/scale_date.html)。 – jazzurro

回答

0

在通常的R數據輸入過程中,「01.01.2013」​​等數值將成爲因子變量。由於它們不屬於兩種「stadard日期格式:YYYY/MM/DD或YYYY-MM-DD之一,除非您構建」as.DT「方法,否則它們不能直接作爲」colClasses「的」Date「輸入。你需要確保它們是字符向量,或者通過在讀取函數中使用stringsAsFactors=FALSE,或者在輸入後使用as.character強制字符。你顯示的那個頭讓我認爲這個數據已經被操作了,或許在函數中?在dplyr包

res <- structure(list(Publication.Date = structure(1:10, .Label = c("01.01.2013", 
"01.01.2014", "01.01.2015", "01.02.2012", "01.03.2012", "01.04.2015", 
"01.05.2012", "01.05.2013", "01.05.2014", "01.06.2011"), class = "factor"), 
    n = c(1L, 8L, 10L, 3L, 16L, 2L, 1L, 7L, 23L, 1L)), .Names = c("Publication.Date", 
"n"), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10")) 

> res 
    Publication.Date n 
1  01.01.2013 1 
2  01.01.2014 8 
3  01.01.2015 10 
4  01.02.2012 3 
5  01.03.2012 16 
6  01.04.2015 2 
7  01.05.2012 1 
8  01.05.2013 7 
9  01.05.2014 23 
10  01.06.2011 1 

> res$Publication.Date <- as.Date(as.character(res$Publication.Date), format="%m.%d.%Y") 

然後你就可以繪製:

png(); qplot(x=Publication.Date, y=n, data=res, geom="point"); dev.off() 

enter image description here

+0

是的,我用dplyr&R將Pub.Date識別爲字符。我嘗試着用你的方式,但Pub.Date的整個欄目轉向NA。我仍然是R的初學者,感謝你的幫助〜 –

+0

「我的方式」沒有使用由dplyr-functions創建的對象,「你的方式」仍然是一個完整的謎,因爲你沒有發佈代碼來顯示創建了「NA」的。如果您需要特定的幫助,您應該編輯您的問題以在您的對象中包含來自'dput'的輸出以及代碼。 –

+0

我添加了我使用的dplyr函數的代碼,希望它能幫上忙。感謝您的幫助。 –

0

先轉換 'Publication.Date' 爲日期格式,然後順序:

使用您的數據:

data <- read.table(pipe('pbpaste'),sep='',header=T,stringsAsFactors = F) 
    data <- data[,-1] 
    names(data) <- c('Pub.Date', 'n’) 

    Pub.Date n 
1 01.01.2014 8 
2 01.01.2015 10 
3 01.02.2012 3 
4 01.03.2012 16 
5 01.04.2015 2 
6 01.05.2012 1 
7 01.05.2013 7 
8 01.05.2014 23 
9 01.06.2011 1 

轉換 'Pub.Date' 到日期格式:

data[,1] <- as.Date(data[,1],format='%d.%m.%Y’) 

and order:

data[order(data$"Pub.Date",data$n), ] 

    Pub.Date n 
9 2011-06-01 1 
3 2012-02-01 3 
4 2012-03-01 16 
6 2012-05-01 1 
7 2013-05-01 7 
1 2014-01-01 8 
8 2014-05-01 23 
2 2015-01-01 10 
5 2015-04-01 2 
+0

我嘗試使用as.Date函數,但似乎它不完整。我將結果添加到問題中,請看看。非常感謝您的幫助。 –

+0

@ Juliet.Y,確切的錯誤信息是什麼?你的區域設置是什麼?在使用「as.Date」函數之前,使用「str」檢查數據框並確保「Pub.Date」不是變量因子。 – hvollmeier