R: Как считать строки с заданной датой в столбце с форматированной датой - PullRequest
0 голосов
/ 16 июня 2019

У меня около 30 000 строк данных со столбцом даты в формате даты. Я хотел бы иметь возможность подсчитывать количество строк по месяцам / годам и годам, но когда я агрегирую с помощью приведенного ниже кода, я получаю вектор в таблице данных для своих результатов вместо числа.

Используя файл csv с гиперссылками, я попробовал функцию агрегирования.

https://www.dropbox.com/s/a26t1gvbqaznjy0/myfiles.csv?dl=0

short.date <- strftime(myfiles$Date, "%Y/%m")
aggr.stat <- aggregate(myfiles$Date ~ short.date, FUN = count)

Ниже приведен вид фрейма данных aggr.stat. Есть два столбца, и второй, начинающийся с «c (») - это тот, в котором я хотел бы увидеть значение счетчика.

1 1969/01 с (-365, -358, -351, -347, -346)

2 1969/02 с (-323, -320)

3 1969/03 c (-306, -292, -290)

4 1969/04 с (-275, -272, -271, -269, -261, -255)

5 1969/05 с (-245, -240, -231)

6 1969/06 c (-214, -211, -210, -205, -204, -201, -200, -194, -190, -186)

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Рассмотрите возможность запуска всего из фреймов данных.В частности, добавьте необходимый столбец месяц / год во фрейм данных, а затем запустите aggregate, используя аргумент data (вместо запуска по отдельным векторам).Наконец, в базе R нет функции count(), вместо нее используйте length:

# NEW COLUMN
myfiles$short.date <- strftime(myfiles$Date, "%Y/%m")

# AGGREGATE WITH SPECIFIED DATA
aggr.stat <- aggregate(Date ~ short.date, data = myfiles, FUN = length)
0 голосов
/ 16 июня 2019

Я не сильно загружаю любой неизвестный файл из Интернета, поэтому вам придется адаптировать предложенное мной решение к вашим потребностям.

Вы можете решить проблему с помощью data.table иlubridate.

Представьте, что в ваших данных есть хотя бы один столбец с именем dates фактических дат (то есть, вызов class(df$dates) вернет хотя бы Date или что-то подобное (POSIXct и т. д.).

# load libraries
library(data.table)
library(lubridate)

# convert df to a data.table
setDT(df)

# count rows per month
df[, .N, by = .(monthDate = floor_date(dates, "month")]

.N считает количество строк, by = группирует данные. Подробнее см. ?data.table.

...