【发布时间】:2018-08-12 09:24:56
【问题描述】:
我有一个看起来像这样的数据框:
DF_1>
T_id D1 D2 Num type type_2 fig
xt-1 2017-05-01 2017-03-25 12:11:45 10 A X 25.20
xt-2 2017-05-01 2017-03-25 21:05:25 20 A Y 20.15
xt-3 2017-05-01 2017-03-25 08:10:55 25 B X 15.11
xt-4 2017-05-03 2017-03-25 07:19:35 30 B Y 22.56
xt-5 2017-05-03 2017-03-25 13:12:56 45 C Z 35.45
xt-6 2017-05-03 2017-03-25 18:14:44 20 D Z 27.21
xt-7 2017-04-06 2017-03-25 19:21:35 15 A Z 23.20
xt-8 2017-04-06 2017-03-25 21:11:15 40 C X 21.40
xt-9 2017-04-08 2017-02-25 22:25:04 20 A A 27.50
xt-10 2017-04-06 2017-02-25 16:04:08 30 A Y 32.20
xt-11 2017-04-05 2017-02-25 18:15:25 20 C Z 30.20
xt-12 2017-04-01 2017-01-25 19:22:25 50 A Z 33.15
xt-13 2017-04-02 2017-01-25 23:19:05 15 A A 30.12
xt-14 2017-03-03 2017-01-25 14:25:09 15 D Y 31.25
xt-15 2017-03-10 2017-01-25 23:25:36 40 A X 25.45
从上面的数据框我想要下面提到的两个矩阵:
1. Date (Last Three Date from `sys.date()`)
D1 count sum mean_num total_sum count_A sum_A count_other sum_other mean_fig mean_TAT
2017-05-03 3 95 31.66 6 0 0 3 95 28.40
2017-05-02 0 0 0 3 0 0 0 0 0.00
2017-05-01 3 55 18.33 3 2 30 1 25 20.15
- 对于
mean_TAT的计算:减去D2-D1然后取 基于同一日期的count值的那一天的平均值。 -
total_sum将从当月的第一个日期开始累积。 -
count_A和sum_A基于type作为特定日期的A。 -
count_other和sum_other表示type不是A。
2.基于月份(根据数据框的最后三个月)
- 每个月还有 5 行和 2 列,根据特定月份的计数,前三个将是前 3 个
type_2。 -
increase_%将在上个月计算(即,如果 5 月 17 日的count比 4 月 17 日 100 为 50,那么其他 5 行将基于上个月count和 @ 987654343@. - 对于
type_2为“A”的值,每个月的第四个A将保持不变。 - 第五个
Other将不是上面提到的那四个type_2。 -
Total将根据count和sum的列进行添加,对于mean将是平均值。
似乎我无法正确解释,希望数据框可以理解矩阵。
期待一些帮助。
【问题讨论】:
-
你可以考虑试试dplyr,尤其是
group_by()函数。 -
@KamilSlowikowski 谢谢,但我从来没有为这么复杂的矩阵编写代码。
-
我不明白你的第二张表,你能提供预期的输出吗?
-
@Moody_Mudskipper 我的第二个表与第一个表相同,只是基于月份。 (例如,计数将基于
D1为整个月,sum、mean等相同。仅此处引入了一个新列,即% increase,它给出了基于上个月的百分比增加或减少count和sum表示月份以及其他 5 个变量。 -
行
X Y Z A other怎么样?它们是否相同但分别在 type_2 和 type 上过滤?