时间表,其中每个月的每一天的数据均在列中给出-如何转换为日期?

时间:2018-08-31 11:27:55

标签: r dataframe data-analysis

我有一个data.frame,它代表数名员工在2年的几个月内的时间表。数据如下:

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列,每列代表相应月份中的日期。将有多个具有相同名称的行。

约翰·史密斯(John Smith)于2017年8月1日完成了1小时20分钟的工作。

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

  • 约翰·史密斯(John Smith)在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

日期将需要正确格式化,但这并不重要。问题是将月份中的日期与相关的月份和年份进行匹配以产生组合日期。欢迎提出任何想法。

2 个答案:

答案 0 :(得分:0)

我可以通过将花费的总时间转换为数字来解决这个问题。根据数据的结构,您可以用冒号分隔此字符串,然后将分钟转换为小时,然后将总和转换为十进制小时。

与此类似:

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)

如果您只需要按月份报告,则必须以一种或另一种方式提取月份名称,但这并不困难。

答案 1 :(得分: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。

相关问题