R如何为每个月回滚12个月并进行总结
页面底部的示例数据 我的目标如下: 对于每个月,回顾过去12个月并根据其过滤数据。例如,如果我们选择2017-11-01。因此,12个月后为2016-12-01。因此,筛选2016-12-01至2017-11-01期间的数据 在这12个月内,计算每个组有多少个唯一ID 在数据框中每个月重复上述操作,即在数据集中每个月返回12个月,并获取每个组的唯一ID计数 如果成功地执行了以上几点,我可以绘制线图,在x轴上显示日期,在y轴上显示每个组每个月的唯一ID计数 我的尝试:R如何为每个月回滚12个月并进行总结,r,R,页面底部的示例数据 我的目标如下: 对于每个月,回顾过去12个月并根据其过滤数据。例如,如果我们选择2017-11-01。因此,12个月后为2016-12-01。因此,筛选2016-12-01至2017-11-01期间的数据 在这12个月内,计算每个组有多少个唯一ID 在数据框中每个月重复上述操作,即在数据集中每个月返回12个月,并获取每个组的唯一ID计数 如果成功地执行了以上几点,我可以绘制线图,在x轴上显示日期,在y轴上显示每个组每个月的唯一ID计数 我的尝试: foo %>% fil
foo %>%
filter(Date >= “2016-12-01” & Date <= “2017-11-01”) %>%
group_by(ID, Group) %>%
count() %>%
group_by(Group) %>%
count
为了获得完整的数据,以防月数不足以追溯到12个月:我使用润滑包来更好地处理日期。 我修改了您的筛选子句并添加了两个for循环,猜测您的第一个日期是2015年1月1日。剩下的只是您的示例代码
library(lubridate)
result_list <- list()
for(y in 2015:2017){
for(m in 1:12){
d <- as.Date(paste0(y,"-",m, '-01'), format = '%Y-%m-%d')
d2 <- d %m-% months(12)
result_list[[paste0(y,'_',m)]] <- foo %>%
filter(Date >= d2 & Date < d) %>%
group_by(ID, Group) %>%
count() %>%
group_by(Group) %>%
count
}
}
库(lubridate)
结果列表%
计数()%>%
分组依据(分组)%>%
计数
}
}
我把结果写进一个列表。也许你必须修改它,以便更容易地绘制结果。我曾经使用润滑包来更好地处理日期。 我修改了您的筛选子句并添加了两个for循环,猜测您的第一个日期是2015年1月1日。剩下的只是您的示例代码
library(lubridate)
result_list <- list()
for(y in 2015:2017){
for(m in 1:12){
d <- as.Date(paste0(y,"-",m, '-01'), format = '%Y-%m-%d')
d2 <- d %m-% months(12)
result_list[[paste0(y,'_',m)]] <- foo %>%
filter(Date >= d2 & Date < d) %>%
group_by(ID, Group) %>%
count() %>%
group_by(Group) %>%
count
}
}
库(lubridate)
结果列表%
计数()%>%
分组依据(分组)%>%
计数
}
}
我把结果写进一个列表。也许您必须修改它以更容易地绘制结果。使用magrittr表示法定义一个函数
count\u id
,该函数采用逗号分隔的ID向量并输出唯一ID的数量
然后将其转换为一个宽zoo对象,每个组同时聚合一列,以便使用toString
连接特定日期/组中的所有ID。对其运行rollappy
,以统计过去12个月内的唯一ID
最后,将数据转换回长格式数据帧
请注意,read.zoo
将用NA
填写任何缺失的年/月计数,只要每组中没有缺失的年/月。显示的数据没有任何年份/月份在每个组中缺失,事实上,几乎没有缺失值,因此它应该可以工作。(取消注释要安装的第一行。)
zoo的开发版本——这里需要它。)
更新
- 现在需要zoo的开发版本
- 修复了ID在多个月内出现的情况
- 将
语句合并到summary
aggregate参数中,以便它现在使用magrittr和zooread.zoo
- 在
rollapply
- 显示来自
rollappyr的输出
count\u id
,该函数采用逗号分隔的ID向量并输出唯一ID的数量
然后将其转换为一个宽zoo对象,每个组同时聚合一列,以便使用toString
连接特定日期/组中的所有ID。对其运行rollappy
,以统计过去12个月内的唯一ID
最后,将数据转换回长格式数据帧
请注意,read.zoo
将用NA
填写任何缺失的年/月计数,只要每组中没有缺失的年/月。显示的数据没有任何年份/月份在每个组中缺失,事实上,几乎没有缺失值,因此它应该可以工作。(取消注释要安装的第一行。)
zoo的开发版本——这里需要它。)
更新
- 现在需要zoo的开发版本
- 修复了ID在多个月内出现的情况
- 将
语句合并到summary
aggregate参数中,以便它现在使用magrittr和zooread.zoo
- 在
rollapply
- 显示来自
rollappyr的输出
rollapply
到rollapplyr
,它提供了正确的对齐方式,而不是以每个日期为中心的12个月的对齐方式。现在,它在每个日期结束时需要12个月的时间。请注意,它只提供了以该日期结束的12个月的月份的输出,但如果您想要部分月份的对齐方式e在开始时,您可以将partial=TRUE
参数添加到rollappyr
。我在读取foo%>%groupby(日期,Gro)时收到以下错误消息
# install.packages("zoo", repos="http://R-Forge.R-project.org")
library(magrittr)
library(zoo)
# . is a vector of comma-separated strings of IDs
count_ids <- . %>%
textConnection %>%
scan(what = "", sep = ",", quiet = TRUE, strip.white = TRUE) %>%
unique %>%
length
foo <- read.csv("foo_complete.csv")
foo %>%
read.zoo(index = "Date", split = "Group", aggregate = toString) %>%
rollapplyr(12, count_ids) %>%
fortify.zoo(melt = TRUE, names = c("Date", "Group", "Count"))
library(zoo)
count_ids <- function(x) {
s <- scan(textConnection(x), what = "", sep = ",", quiet = TRUE, strip.white = TRUE)
length(unique(s))
}
foo <- read.csv("foo_complete.csv")
z <- read.zoo(foo, index = "Date", split = "Group", aggregate = toString)
z.roll <- rollapplyr(z, 12, count_ids)
fortify.zoo(z.roll, melt = TRUE, names = c("Date", "Group", "Count"))
> foo <- read.csv("foo_complete.csv")
> foo %>%
+ read.zoo(index = "Date", split = "Group", aggregate = toString) %>%
+ rollapplyr(12, count_ids)
Min sport Xox
2016-07-01 17 137 2165
2016-08-01 17 142 2273
2016-09-01 19 149 2361
2016-10-01 19 154 2429
2016-11-01 21 156 2532
2016-12-01 22 161 2578
2017-01-01 22 163 2585
2017-02-01 25 163 2594
2017-03-01 25 167 2632
2017-04-01 25 168 2648
2017-05-01 26 166 2659
2017-06-01 23 166 2686
2017-07-01 24 162 2740
2017-08-01 27 163 2758
2017-09-01 28 162 2788
2017-10-01 28 165 2831
2017-11-01 28 158 2786
2017-12-01 29 153 2688