【发布时间】:2018-02-20 06:53:13
【问题描述】:
我有这个数据框。
token DD1 Type DD2 Price
AB-1 2018-01-01 10:12:15 Low 2018-01-25 10000
AB-5 2018-01-10 10:12:15 Low 2018-01-25 15000
AB-2 2018-01-05 12:25:04 High 2018-01-20 25000
AB-3 2018-01-03 17:04:25 Low 2018-01-27 50000
....
AB-8 2017-12-10 21:08:12 Low 2017-12-30 60000
AB-8 2017-12-10 21:08:12 High 2017-12-30 30000
输入:
structure(list(token = structure(c(2L, 5L, 3L, 4L, 1L, 6L, 6L
), .Label = c("....", "AB-1", "AB-2", "AB-3", "AB-5", "AB-8"), class = "factor"),
DD1 = structure(c(2L, 5L, 4L, 3L, 1L, 6L, 6L), .Label = c("",
"01/01/2018 10:12:15", "03/01/2018 17:04:25", "05/01/2018 12:25:04",
"10/01/2018 10:12:15", "10/12/2017 21:08:12"), class = "factor"),
Type = structure(c(3L, 3L, 2L, 3L, 1L, 3L, 2L), .Label = c("",
"High", "Low"), class = "factor"), DD2 = structure(c(3L,
3L, 2L, 4L, 1L, 5L, 5L), .Label = c("", "20/01/2018", "25/01/2018",
"27/01/2018", "30/12/2017"), class = "factor"), Price = c(10000L,
15000L, 25000L, 50000L, NA, 60000L, 30000L)), .Names = c("token",
"DD1", "Type", "DD2", "Price"), class = "data.frame", row.names = c(NA,
-7L))
从上面提到的数据框中,如果行对于特定日期不可用,我想要基于日期的 2 种子集数据框(最后三个日期按降序排列(来自DD2),而不是将该日期显示为所有字段为' 0') 和月份(如果行对于特定日期不可用,则按降序排列最后三个日期,而不是将该日期显示为所有字段为 '0')。
Avg Low 公式(Avg High 相同):DD2-DD1,然后根据可用的 nrow 取中值。
月份百分比公式:(最近值-旧值)/(旧值)
每当我运行代码时,代码应该从数据框中选择最近三天的数据以及最近三个月的数据。
DF1:
Date nrow for Low Med Low sum of value low nrow for High Med High sum of value High
27-01-2018 1 24 50000 0 0 0
26-01-2018 0 0 0 0 0 0
25-01-2018 2 19.5 25000 0 0 0
DF2
Month nrow low % sum low % nrow high % sum high %
Jan-18 3 200% 75000 25% 1 0% 25000 -17%
Dec-17 1 100% 60000 100% 1 100% 0 100%
Nov-17 0 - - - 0 - - -
【问题讨论】:
-
@ZahiroMor 这是我想要的输出,没有存储为 R 中的 Dataframe ...:(
-
如果您还可以展示您迄今为止尝试过的内容以及您卡在哪里,您将获得更多帮助
-
没有数据困难,但这可能是一种方法,使用
dplyr:您需要一个包含一年中所有日期的列的数据框。将它与您的数据框连接起来,这样您就可以确定没有数据的日子也连续。您必须将日期文件存储为日期(使用lubridate)。然后您可以轻松地arrange按降序排列,group_by月份,使用包含所需计算的mutate创建新列,然后filter每月获取(第一)3 行。 -
@ZahiroMor 更新了输入数据。
-
@Tjebo 我正在尝试使用该方法但还无法完成
DF1$Sum_low<-paste('USD ',formatC(sum(df[df1$TYPE=='Low' & & !(df$token%in% price$token) ,]$price), big.mark=',', format = 'f', digit=1))
标签: r dataframe matrix dplyr data.table