如何在 R 中获取分类频率的每日时间序列
How to obtain daily time series of categorical frequencies in R
我有这样一个数据框:
data <- data.frame(daytime = c('2005-05-03 11:45:23', '2005-05-03 11:47:45',
'2005-05-03 12:00:32', '2005-05-03 12:25:01',
'2006-05-02 10:45:15', '2006-05-02 11:15:14',
'2006-05-02 11:16:15', '2006-05-02 11:18:03'),
category = c("A", "A", "A", "B", "B", "B", "B", "A"))
print(data)
daytime category date2
1 2005-05-03 11:45:23 A 05/03/05
2 2005-05-03 11:47:45 A 05/03/05
3 2005-05-03 12:00:32 A 05/03/05
4 2005-05-03 12:25:01 B 05/03/05
5 2006-05-02 10:45:15 B 05/02/06
6 2006-05-02 11:15:14 B 05/02/06
7 2006-05-02 11:16:15 B 05/02/06
8 2006-05-02 11:18:03 A 05/02/06
我想将此数据框转换为像这样的每日分类频率的时间序列:
day cat_A_freq cat_B_freq
1 2005-05-01 3 1
2 2005-05-02 1 3
我试过:
library(anytime)
data$daytime <- anytime(data$daytime)
data$day <- factor(format(data$daytime, "%D"))
table(data$day, data$category)
A B
05/02/06 1 3
05/03/05 3 1
但是正如您所看到的,格式化新变量 day 会更改日期的外观。您还可以看到 table 没有按正确的顺序 return 日期(年份乱序),因此我可以轻松地转换为时间序列。
关于如何以更简单的方式获取频率的任何想法,或者如果是这种方式,如何以正确的日期顺序获取频率并将其放入数据帧以便轻松转换为时间序列对象?
使用 tidyverse 的解决方案。你的数据中daytime
列的格式是好的,所以我们可以直接使用as.Date
而不指定其他格式或使用其他功能。
library(tidyverse)
data2 <- data %>%
mutate(day = as.Date(daytime)) %>%
count(day, category) %>%
spread(category, n)
data2
# # A tibble: 2 x 3
# day A B
# * <date> <int> <int>
# 1 2005-05-03 3 1
# 2 2006-05-02 1 3
我有这样一个数据框:
data <- data.frame(daytime = c('2005-05-03 11:45:23', '2005-05-03 11:47:45',
'2005-05-03 12:00:32', '2005-05-03 12:25:01',
'2006-05-02 10:45:15', '2006-05-02 11:15:14',
'2006-05-02 11:16:15', '2006-05-02 11:18:03'),
category = c("A", "A", "A", "B", "B", "B", "B", "A"))
print(data)
daytime category date2
1 2005-05-03 11:45:23 A 05/03/05
2 2005-05-03 11:47:45 A 05/03/05
3 2005-05-03 12:00:32 A 05/03/05
4 2005-05-03 12:25:01 B 05/03/05
5 2006-05-02 10:45:15 B 05/02/06
6 2006-05-02 11:15:14 B 05/02/06
7 2006-05-02 11:16:15 B 05/02/06
8 2006-05-02 11:18:03 A 05/02/06
我想将此数据框转换为像这样的每日分类频率的时间序列:
day cat_A_freq cat_B_freq
1 2005-05-01 3 1
2 2005-05-02 1 3
我试过:
library(anytime)
data$daytime <- anytime(data$daytime)
data$day <- factor(format(data$daytime, "%D"))
table(data$day, data$category)
A B
05/02/06 1 3
05/03/05 3 1
但是正如您所看到的,格式化新变量 day 会更改日期的外观。您还可以看到 table 没有按正确的顺序 return 日期(年份乱序),因此我可以轻松地转换为时间序列。
关于如何以更简单的方式获取频率的任何想法,或者如果是这种方式,如何以正确的日期顺序获取频率并将其放入数据帧以便轻松转换为时间序列对象?
使用 tidyverse 的解决方案。你的数据中daytime
列的格式是好的,所以我们可以直接使用as.Date
而不指定其他格式或使用其他功能。
library(tidyverse)
data2 <- data %>%
mutate(day = as.Date(daytime)) %>%
count(day, category) %>%
spread(category, n)
data2
# # A tibble: 2 x 3
# day A B
# * <date> <int> <int>
# 1 2005-05-03 3 1
# 2 2006-05-02 1 3