2014-12-12 3 views
0

Заранее благодарю вас за помощь. Я пытаюсь сделать что-то, что я уверен, просто, но я не могу понять. Я хочу сделать диаграмму рассеяния в R с датой на оси x и относительной частотой по оси y. Проблема в том, что все кластеры на определенных точках по оси X, потому что R не понимает, что числа являются датами. Даты отформатированы yearmonthset, где set - это 0-й или 1-й или 2-й набор из 10 дней в этом месяце. Итак, 12071 год - 1 июля 2012 года. Мне нужно R, чтобы понять, что есть 3 сета в месяц и 12 месяцев в году и 4 года, и пространство так рассеивается. Каков наилучший способ решить эту проблему?Сделка с датами в R

Вот отрывок из моих данных:

ID,Date,Trigram,Freq,Relfreq 
TPN,12071,a constitutional convention,6,0.00001211467753757064371339095882 
TPN,12111,a constitutional convention,2,0.000003302558987831721409334022467 
TPN,11071,a constitutional convention,6,0.00001211467753757064371339095882 
TPN,11111,a constitutional convention,2,0.000003302558987831721409334022467 
TPN,10071,a constitutional convention,6,0.00001211467753757064371339095882 
TPN,10111,a constitutional convention,2,0.000003302558987831721409334022467 
TPN,09071,a constitutional convention,6,0.00001211467753757064371339095882 
TPN,09111,a constitutional convention,2,0.000003302558987831721409334022467 
CR,10032,a constitutional convention,3,0.000001049388049359016289650690200 
CR,10062,a constitutional convention,2,7.020490002120187980640296770E-7 

Я пытался использовать as.date(), как описано на этом сайте http://www.statmethods.net/input/dates.html, но я действительно не понимаю.

> strdates <- origina_NoCon$Date 
> dates <- as.Date(strdates, %y%m) 
Error: unexpected SPECIAL in "dates <- as.Date(strdates, %y%" 

Edit:

Это часть выходного dput (strdates):

> dput(strdates) 
c(12071L, 12111L, 11071L, 11111L, 10071L, 10111L, 9071L, 9111L, 
10032L, 10062L, 11041L, 11071L, 11111L, 11121L, 12020L, 12021L, 
12102L, 12110L, 12111L, 11021L,...) 
+1

Пожалуйста, измените вопрос, чтобы дать выход 'dput (strdates)'. (Кажется, это символ 'характер', но вам нужно перекодировать, если они являются' фактором '.) –

+0

@StephanKolassa сделано! это изменит ваш ответ ниже? Спасибо. –

+0

В тривиальной степени. Я отредактировал свой ответ. –

ответ

1

Давайте сначала изменить strdates к character плюсованием с нулями по мере необходимости:

strdates.chr <- sprintf("%05i",strdates) 

Теперь вы можете сначала переформатировать их представлять первый каждого месяца, а затем преобразовать его в Date:

> as.Date(paste0(substr(strdates.chr,1,4),"01"),format="%y%m%d") 
[1] "2012-07-01" "2012-11-01" "2011-07-01" "2011-11-01" "2010-07-01" 
[6] "2010-11-01" "2009-07-01" "2009-11-01" "2010-03-01" "2010-06-01" 
[11] "2011-04-01" "2011-07-01" "2011-11-01" "2011-12-01" "2012-02-01" 
[16] "2012-02-01" "2012-10-01" "2012-11-01" "2012-11-01" "2011-02-01" 

Для того, чтобы затем включить последнюю часть информации, извлечь что (substr), конвертировать в numeric, и, наконец, добавить соответствующее кратное 10 дней (с добавлением целых чисел к Date с автоматически интерпретируются как добавление количества дней):

> as.Date(paste0(substr(strdates.chr,1,4),"01"),format="%y%m%d")+ 
+ as.numeric(substr(strdates.chr,5,5))*10 
[1] "2012-07-11" "2012-11-11" "2011-07-11" "2011-11-11" "2010-07-11" 
[6] "2010-11-11" "2009-07-11" "2009-11-11" "2010-03-21" "2010-06-21" 
[11] "2011-04-11" "2011-07-11" "2011-11-11" "2011-12-11" "2012-02-01" 
[16] "2012-02-11" "2012-10-21" "2012-11-01" "2012-11-11" "2011-02-11" 
+0

Я благодарю вас за помощь, но теперь я получаю это как выход: dput (date) Структура (c (15522, 15645, 15156, 15279, 14791, 14914, 14426, 14549, 14679, 14771, 15065, 15156, 15279, 15309, 15361, 15371, 15624, 15635, 15645, 15006, 15258, 15279, 14631, 14641, 14781, 14873, 14893, 14914, 14266, 14276, 14416, 14508, 14528, 14549 ...) –

+0

Да, но с 'class =" Date "' в самом конце. 'Date' внутренне представлены как целые числа, а именно смещение в дни от «начала UNIX времени», а именно 1970-01-01. Ваш вектор ' дата 'должна по-прежнему делать то, что вам нужно. Посмотрите на' print (date) '. –

+0

О, я получаю это! Большое вам спасибо за ваше терпение. Но я все еще немного смущен. Теперь он говорит, что все было сделано на первом день месяца. Как мне добавить его, например, кратное 10 дней на основе на «0» или «1» или «2» в конце строки символов? –

Смежные вопросы