Мне был предоставлен файл данных Stata (counts.dta), который содержит ежедневные данные за годы с 1975 по 2006 год, хранящиеся в широкоформатном формате. В столбцах помечен месяц (полное имя месяца в виде символьной строки), день (числовые значения 1-31), а затем годы с 1975 по 2006 год с метками «_1975», «_1976» ... '_2006' , Я предполагаю, что подчеркивание является следствием чего-то в Stata. Есть фиктивные значения нуля (0), вставленные на дату 29 февраля, когда год-столбец не является високосным годом.R. Обработка дат и широкого формата из импортированного файла Stata
Я хочу сделать несколько вещей. Во-первых, конвертируйте в длинную форму с разумным представлением за год. Во-вторых, измените трехстороннее представление даты на нечто более разумное.
Мой подход был изменить символьная строка месяц до множителя, а затем получить его в правильном порядке:
require("foreign")
counts <- read.dta(file='counts.dta')
counts[['month']] <- as.factor(counts[['month']])
counts[['month']] <-
factor(counts[['month']], levels(counts[['month']])[c(5,4,8,1,9,7,6,2,12,11,10,3)])
Я тогда
str(counts)
'data.frame': 366 obs. of 34 variables:
$ month: Factor w/ 12 levels "January","February",..: 1 1 1 1 1 1 1 1 1 1 ...
$ day : int 1 2 3 4 5 6 7 8 9 10 ...
$ _1975: int 515 649 745 599 445 667 725 749 646 740 ...
$ _1976: int 485 685 529 467 630 723 712 685 715 504 ...
$ _1977: int 505 437 489 588 634 734 682 537 453 673 ...
и так далее. Преобразование в длинном формате
lcounts <- reshape(counts,
direction="long",
varying=list(names(counts)[3:34]),
v.names="n.counts",
idvar=c("month","day"),
timevar="Year",
times=1975:2006)
str(lcounts)
дает
'data.frame': 11712 obs. of 4 variables:
$ month : Factor w/ 12 levels "January","February",..: 1 1 1 1 1 1 1 1 1 1 ...
$ day : int 1 2 3 4 5 6 7 8 9 10 ...
$ Year : int 1975 1975 1975 1975 1975 1975 1975 1975 1975 1975 ...
$ n.counts: int 515 649 745 599 445 667 725 749 646 740 ...
плюс некоторые дополнительные строки, относящиеся к исходному файлу Stata.
Мои вопросы: (1) то, что теперь является хорошим способом конвертировать в фактор-месяц, числовой год и числовой день в полезный формат даты, чтобы я мог определить, например, день неделя, интервал между двумя датами и так далее? (2) Был ли лучший способ решить проблему с самого начала?
@ExperimenteR У ОП уже есть данные, загруженные в R. Этот совет не помогает решить актуальные вопросы. – Thomas
@Thomas Я поддерживаю такие комментарии, как ExperimeteR, которые могут быть полезны на соседней территории, а именно для проблем, очень похожих, но не совсем похожих на опубликованные. Естественно, что по-прежнему существует решение о том, где провести линию, но ОП задал их (2) для более широкого комментария, что кажется законным, учитывая основной вопрос, дающий конкретные детали. –