如何使用dplyr

时间:2019-07-24 20:53:05

标签: r dataframe for-loop dplyr

我有一个数据框,其中包含所看到的每日人数组成员的每日计数。我想获得所见小组成员人数的每月平均值(在数据框中显示)。我一直在尝试使用dplyr,因为它比创建新的数据框并使用for循环填充它要简单得多。我对编码非常陌生,希望能够对多个组执行此操作。我的数据框如下所示:

data.frame':    148 obs. of  7 variables:
 $ Date                     : Date, format: "2013-05-01" "2013-05-02" ...
 $ Group                    : chr  "WK" "WK" "WK" "WK" ...
 $ Session                  : Factor w/ 12 levels "AM","AM1","AM2",..: 9 1 9 9 1 9 9 1 1 1 ...
 $ Group.Members.Seen       : num  7 6 8 9 9 6 8 9 4 9 ...
 $ Roving.Males             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ Undyed.Group.Members.Seen: num  NA NA NA NA NA NA NA NA NA NA ...
 $ Non.group.Other          : num  NA NA NA NA NA NA NA NA NA NA ..

我每天没有观察值,有时一天有多个观察值。在此特定情况下,Group.members.seen列中仅存在数据,但是在其他数据集中,我确实在roving.males,undyed.group.members.seen和non.group.other列中具有数字。

对于这个特定的数据集,我只想使用Date和Group.Members.seen列,因为这些列中只有数据。我已经使用select来选择那些列,然后尝试使用mutate,group_by和总结来获取我想要的东西。但是,我认为问题在于日期。也尝试过聚合,但是我认为那不是最好的。

test <- WK.2013 %>% 
  select(Date, Group.Members.Seen) %>% 
  mutate(mo = Date(format="%m"), mean.num.members = mean(Group.Members.Seen)) %>% 
  group_by(Date(format="%m")) %>% 
  summarise(mean = mean(Group.Members.Seen))

错误消息说它找不到函数“ Date”,这可能是该代码的一长串问题的开始。

2 个答案:

答案 0 :(得分:1)

您可以尝试lubridate打包并将日期四舍五入为月份或年份或其他单位。

library(lubridate)

mydate <- today()
> floor_date(today(),unit = "month")
[1] "2019-07-01"
> floor_date(mydate,unit = "month")
[1] "2019-07-01"
> round_date(mydate,unit = "month")
[1] "2019-08-01"

答案 1 :(得分:0)

很难确定这是否可以在不查看实际数据的情况下起作用,但是您可以尝试使用apply.monthly软件包中的xts函数吗?