Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R如何为每个月回滚12个月并进行总结_R - Fatal编程技术网

R如何为每个月回滚12个月并进行总结

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

页面底部的示例数据

我的目标如下:

对于每个月,回顾过去12个月并根据其过滤数据。例如,如果我们选择2017-11-01。因此,12个月后为2016-12-01。因此,筛选2016-12-01至2017-11-01期间的数据 在这12个月内,计算每个组有多少个唯一ID 在数据框中每个月重复上述操作,即在数据集中每个月返回12个月,并获取每个组的唯一ID计数 如果成功地执行了以上几点,我可以绘制线图,在x轴上显示日期,在y轴上显示每个组每个月的唯一ID计数

我的尝试:

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
    语句合并到
    read.zoo
    aggregate参数中,以便它现在使用magrittr和zoo
  • rollapply
  • 显示来自
    rollappyr的输出

使用magrittr表示法定义一个函数
count\u id
,该函数采用逗号分隔的ID向量并输出唯一ID的数量

然后将其转换为一个宽zoo对象,每个组同时聚合一列,以便使用
toString
连接特定日期/组中的所有ID。对其运行
rollappy
,以统计过去12个月内的唯一ID

最后,将数据转换回长格式数据帧

请注意,
read.zoo
将用
NA
填写任何缺失的年/月计数,只要每组中没有缺失的年/月。显示的数据没有任何年份/月份在每个组中缺失,事实上,几乎没有缺失值,因此它应该可以工作。(取消注释要安装的第一行。) zoo的开发版本——这里需要它。)

更新
  • 现在需要zoo的开发版本
  • 修复了ID在多个月内出现的情况
  • summary
    语句合并到
    read.zoo
    aggregate参数中,以便它现在使用magrittr和zoo
  • rollapply
  • 显示来自
    rollappyr的输出

如果有助于您解决问题,您可能应该接受答案,以便将问题视为已结束。如果有助于您解决问题,以便将问题视为已结束,您可能应该接受答案。我在阅读foo%%>%groupby(Date,group)%%>%summary时收到以下错误消息(Count=n_distinct(ID))%%>%ungroup()%%>%read.zoo(split=“Group”)在read.zoo(,split=“Group”)中出错:索引与数据不匹配我收到此错误:read.zoo(,split=“Group”)中出错:索引在数据行1处有错误条目这可能与read.zoo(split=“Group”)有关由于上述所有功能都有效。我不熟悉zoo。我使用的是R版本3.4.2在通过您的链接更新我的zoo后,我运行了您最近的代码。我的手动输出与您的不同,而且您的输出没有完整的月份。使用我在foo的完整数据集上的尝试代码,我收到的组Xox计数为2786,sport为158,Min为1582017-11-01月的28。但您没有该月,我可以在您的输出中看到2017-05-01月的这些计数匹配。在我的情况下,应从2017-11-01开始向后12个月,即2016-12-01,结果应分配给2017-11-01。如果更改
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