首页 > 解决方案 > 混合 ddply 和 interval 时出错

问题描述

我一直在尝试计算个人的间隔并且遇到了一个奇怪的错误。具体来说,在这段代码中:

library(lubridate)
library(tidyverse)
library(plyr)
df<-tibble(dates=mdy(c("2/20/20","2/25/20","3/1/20","3/11/20","3/20/20")),recips=c("x","x","a","a","a"),treatment=c("T","P","T","P","P"),eventtype=c("a","real","y","z","real"))

df%>%mutate(window=interval(start=dates,end=dates+weeks(2)))
ddply(df,.(recips),mutate,window=interval(start=dates,end=dates+weeks(2)))

最后一行绘制了倒数第二行未绘制的错误。有小费吗?

标签: r

解决方案


问题将是class其输出interval不符合ddply. 一个选项是转换为characterwithas.character

plyr::ddply(df, c("recips"), plyr::mutate,
  window = as.character(interval(start = dates, end = dates + weeks(2))))

-输出

#     dates recips treatment eventtype                         window
#1 2020-03-01      a         T         y 2020-03-01 UTC--2020-03-15 UTC
#2 2020-03-11      a         P         z 2020-03-11 UTC--2020-03-25 UTC
#3 2020-03-20      a         P      real 2020-03-20 UTC--2020-04-03 UTC
#4 2020-02-20      x         T         a 2020-02-20 UTC--2020-03-05 UTC
#5 2020-02-25      x         P      real 2020-02-25 UTC--2020-03-10 UTC

根据显示的数据,我们正在创建interval“日期”的每个元素。因此,group_by不需要该操作

library(dplyr)
df %>%
        mutate(window = interval(start=dates,end=dates+weeks(2)))

推荐阅读