列表中包含每月每天数据的时间表 - 如何转换为日期?

问题描述 投票:0回答:2

我有一个data.frame代表几个工作人员在两年内的几个月的时间表。数据看起来像:

Name         Month      1     2     3   ...  31    Total  Job     ... [more columns]

John Smith   Aug 2017   1:20                       1:20   Typing
Mary Jones   Sep 2017                                     Prooing
John Smith   Oct 2017         0:15           1:10  1:25   Typing
...
Jim Miles    Feb 2018         1:30  2:10           3:40   Admin

共有31列,每列代表相应月份的日期。将有多个具有相同名称的行。

所以看看第一个条目,约翰史密斯在2017年8月1日做了1小时20分钟的工作。

我想要做的是以细粒度的方式分析这些数据,例如

  • 约翰史密斯在2017年9月的打字上花了多少小时?
  • 2018年1月至2月进行了多少次打样?

我有点坚持如何进行以便分析数据。建议表示赞赏。

补充说明:

阅读了三篇非常有用的回复并查看了tidyr,我已经澄清了我的想法并认为我需要修改数据,因此每个条目都有一行,因此示例表将变为:

Name         Date          Duration  Job     ... [more columns]

John Smith   01 Aug 2017   1:20      Typing
John Smith   02 Oct 2017   0:15      Typing
John Smith   31 Oct 2017   0:15      Typing
...
Jim Miles    02 Feb 2018   1:30      Admin
Jim Miles    03 Feb 2018   2:10      Admin

日期需要正确格式化,但这不是主要的。问题是将月份与相关月份和年份相匹配以生成复合日期。欢迎任何想法。

r dataframe data-analysis
2个回答
0
投票

我会通过将花费的总时间转换为数字来实现此目的。根据数据的结构,您可以用冒号分割此字符串并将分钟转换为小时,将sum转换为小数小时。

有点像这样:

x <- c("1:20", "1:25", "3:40")
x <- strsplit(x, ":")

sapply(x, FUN = function(m) {
  m <- as.numeric(m)
  sum(m[1], m[2]/60)
  })

[1] 1.333333 1.416667 3.666667

然后,您可以使用aggregate按月 - 年和名称汇总。

aggregate(Total ~ Name + Month + Job, data = xy, FUN = sum)

如果您只需按月报告,则必须以某种方式提取月份名称,但没有什么难的。


0
投票

在跟进@Khlick的建议之后,我成功地使用了gather()

mydata <- mydata %>% gather(new_date, time_spent, "1":"31")

这产生了两个新列new_datetime_spent,然后为列1-31的每个数据点创建了一个新行。

所以现在我对每个数据点都有月份,例如Aug 2017在一栏中,工作完成的那一天,例如12在另一个。我将月份更改为原始电子表格中的日期,因此它变为2017-08-01(所有日期现在都有01)。然后在R我使用substr()paste()来取代正确的那一天,即2017-08-12

最后,我留下了大量的行,在time_spent没有任何价值。我删除了那些行。

我现在有:

姓名日期工作时间... [更多专栏]

John Smith   2017-08-01   1:20      Typing
John Smith   2017-10-02   0:15      Typing
John Smith   2017-10-31   0:15      Typing
...
Jim Miles    2018-02-02   1:30      Admin
Jim Miles    2018-02-03   2:10      Admin

我做了一些抽查,似乎数据被正确转换了。感谢所有人,尤其是@Khlick。

© www.soinside.com 2019 - 2024. All rights reserved.