【发布时间】:2019-08-19 16:02:46
【问题描述】:
我有 6 个变量的数据:EmployeeID、JobID、Name、JobLocation、Date 和 HoursWorked。我想按 EmployeeID 和 JobID 对我的数据进行分组(即在一行中查找具有相同 EmployeeID 和 JobID 的所有记录),然后按组查找最小和最大日期,以及这些日期之间所有 HoursWorked 的总和。我希望我的数据以列结尾:EmployeeID、JobID、Name JobLocation、MinDate、MaxDate、TotalHoursWorked。
到目前为止,我已经尝试过了,但 MinDate、MaxDate 和 TotalHoursWorked 显示每条记录的日期相同。
Data$EmployeeID<- as.factor(Data$EmployeeID)
Data$JobID<- as.factor(Data$JobID)
Data$Date<- as.factor(Data$Date)
Data$Date<- as.Date(Data$Date,format="%m/%d/%Y")
Data$HoursWorked<-as.numeric(Data$HoursWorked)
Data<-Data[c("EmployeeID", "Name","JobID", "JobLocation", "Date", "HoursWorked")]
Data<- Data%>%
group_by(Data$EmployeeID,Data$JobID, Data$Name,Data$JobLocation) %>%
summarize(TotalHoursWorked = sum(Data$HoursWorked)) %>%
mutate(MaxDate=max(Data$Date), MinDate=min(Data$Date))
不带“名称”列的样本(数据)输出:
> sample(Data)
# A tibble: 1,000 x 5
EmployeeID HoursWorked JobID Date JobLocation
<fct> <dbl> <fct> <date> <chr>
1 32589 4 B3031-002513-00 2016-03-14 #
2 32590 8 B3031-002562-00 2016-04-08 #
3 32591 9 B3031-002564-00 2016-04-05 #
4 32591 2.5 B3031-002564-00 2016-04-06 #
5 32591 3 B3031-002562-00 2016-04-07 #
6 32591 7.5 B3031-002562-00 2016-04-08 #
7 32605 0 B3031-002348-00 2016-01-04 #
8 32605 3 B3031-002419-00 2016-01-04 #
9 32605 0 B3031-002348-00 2016-01-05 #
10 32605 3 B3031-002419-00 2016-01-05 #
# ... with 990 more rows
运行 group_by 代码后输出:
> sample(Data)
# A tibble: 80 x 6
MaxDate `Data$JobID` MinDate `Data$\`Job Location\`` TotalHoursWorked `Data$EmployeeID`
<date> <fct> <date> <chr> <dbl> <fct>
1 2016-07-29 B3031-002513-00 2016-01-04 # 3288. 32589
2 2016-07-29 B3031-002562-00 2016-01-04 # 3288. 32590
3 2016-07-29 B3031-002562-00 2016-01-04 # 3288. 32591
4 2016-07-29 B3031-002564-00 2016-01-04 # 3288. 32591
5 2016-07-29 B3031-002348-00 2016-01-04 # 3288. 32605
6 2016-07-29 B3031-002419-00 2016-01-04 # 3288. 32605
7 2016-07-29 B3031-002445-00 2016-01-04 # 3288. 32605
8 2016-07-29 B3031-002502-00 2016-01-04 # 3288. 32605
9 2016-07-29 B3031-002504-00 2016-01-04 # 3288. 32605
10 2016-07-29 B3031-002505-00 2016-01-04 # 3288. 32605
# ... with 70 more rows
【问题讨论】:
-
在管道
%>%之后你不需要Data$,删除它,问题多次消失。 -
成功了!但是,EmployeeID 和 JobID 仍然没有被分组,并且总和不起作用。基本上 TotalHoursWorked 仍然显示 HoursWorked 的值,而不是聚合 min 和 max 日期之间的所有 HoursWorked。
-
我认为这是因为当我真的只想按 EmployeeID 和 JobID 分组时,我按多列分组。有没有办法投影所有列,但只能按这两个列进行分组/聚合?
-
您可以发布示例数据吗?请使用
dput(Data)的输出编辑问题。或者,如果dput(head(Data, 20))的输出太大。 -
我不能这样做,因为它是私人数据。还有什么我可以做的吗?
标签: r