带条件的R中的Sumif
我想在R中做一个条件和,我有一个如下的表格。有了这些数据,我想对未来5天每个办公桌的总价值进行预测。值应包含从开始日期到结束日期的日期带条件的R中的Sumif,r,R,我想在R中做一个条件和,我有一个如下的表格。有了这些数据,我想对未来5天每个办公桌的总价值进行预测。值应包含从开始日期到结束日期的日期 +-------+------------+-------+-------+------------+------+ | Index | Date | Desk | Value | Out_date | Days | +-------+------------+-------+-------+------------+------+ |
+-------+------------+-------+-------+------------+------+
| Index | Date | Desk | Value | Out_date | Days |
+-------+------------+-------+-------+------------+------+
| 16 | 2020-07-30 | Desk1 | 1 | 2020-08-17 | 12 |
| 51 | 2020-08-13 | Desk2 | 2.000 | 2020-08-14 | 4 |
| 52 | 2020-08-13 | Desk3 | 2.000 | 2020-08-15 | 4 |
| 53 | 2020-08-13 | Desk3 | 2.000 | 2020-08-16 | 4 |
+-------+------------+-------+-------+------------+------+
我如何解决这个问题
输出应该是什么样子的:
+-------+------------+------------+------------+------------+------------+
| Desk | 2020-08-14 | 2020-08-15 | 2020-08-16 | 2020-08-17 | 2020-08-18 |
+-------+------------+------------+------------+------------+------------+
| Desk1 | 1 | 1 | 1 | 1 | 0 |
| Desk2 | 2 | 0 | 0 | 0 | 0 |
| Desk3 | 4 | 4 | 2 | 0 | 0 |
+-------+------------+------------+------------+------------+------------+
dplyr
和tidyr
软件包满足您的需要。使用分组依据(办公桌、日期)
和汇总(预测=您的功能)
。然后您可以pivot\u wide()
获得所需的输出
library(dplyr)
library(tidyr)
df %>%
group_by(Desk, Date) %>%
summarize(forecast = your_function) %>%
pivot_wider(names_from = "Date", values_from = "forecast")
您可以使用dplyr和tidyr进行此操作
input <- tibble::tibble(Desk = c("Desk1",
"Desk2",
"Desk1",
"Desk3"),
Date = c("30.07.20",
"10.08.20",
"10.08.20",
"13.08.20"),
Value = c(0.006,
5.500,
0.300,
2.500))
input %>%
dplyr::group_by(Desk, Date) %>%
dplyr::summarise(sum_value = sum(Value)) %>%
dplyr::ungroup() %>%
tidyr::pivot_wider(names_from = Date, values_from = sum_value)
输入%
dplyr::分组人(办公桌、日期)%>%
dplyr::总结(总和值=总和(值))%>%
dplyr::解组()%>%
tidyr::pivot\u更宽(名称\u from=Date,值\u from=sum\u值)
从您的描述中,听起来好像表格中的每一行都代表了一个给定时间段内与桌子相关联的值。与该办公桌关联的值从特定的日期开始,一直持续到过期日期。然而,这些关联可以同时发生,这意味着在任何特定的一天,一张桌子可能有几个关联的值。您的目的是将这些值相加
如果我的理解是正确的,那么以下代码将为您提供相关的金额:
库(dplyr)
df%>%
变异(天=数值(difftime(Out_date,date,units=“day”))+1)%>%
添加行(索引=max(df$Index)+1,日期=max(df$Date),
Desk=“Desk1”,Value=0,Out\u date=max(df$date)+1,
天数=6)%>%
突变(条目=序号(nrow(.)),n=天数)%>%
三年:未计算(天)%>%
分组依据(条目)%>%
变异(日期=顺序日期(最小(日期),长度=最大(n),按=“1天”))%>%
分组人(办公桌、日期)%>%
汇总(值=总和(值))%>%
tidyr::pivot_加宽(名称为“从日期开始”,值为“从值开始”)%>%
如果(函数(x)有(is.na(x)),函数(x)替换(x,is.na(x),0))%>%
as.data.frame()
#>办公桌2020-07-30 2020-07-31 2020-08-01 2020-08-02 2020-08-03 2020-08-04
#>1个办公桌1
#>2桌面2 0 0 0 0 0 0 0 0
#>3桌面3 0 0 0 0 0 0 0 0 0
#> 2020-08-05 2020-08-06 2020-08-07 2020-08-08 2020-08-09 2020-08-10 2020-08-11
#> 1 1 1 1 1 1 1 1
#> 2 0 0 0 0 0 0 0
#> 3 0 0 0 0 0 0 0
#> 2020-08-12 2020-08-13 2020-08-14 2020-08-15 2020-08-16 2020-08-17 2020-08-18
#> 1 1 1 1 1 1 1 0
#> 2 0 2 2 0 0 0 0
#> 3 0 4 4 4 2 0 0
来自问题的数据
你到底是什么意思?您的输出应该是什么样的?您的问题是随附的incomletesample输出。那么您是如何获得该表的?我们中的一些人不知道其他语言的术语。按日期和桌子求和。好的,但你提到了5的前向投影?这是什么意思?同样在你的日期中,我只看到了2020-07-30
到2020-08-13
,但在你的回答中,我看到了2020-08-14
什么是预测=你的函数?你想预测五天,但你没有解释它是如何工作的。您使用的预测模型或公式是什么?这就是“your_function”所在的位置。但是我需要开始日期到结束日期之间的日期值谢谢,如何做正向投影部分?例如,我需要2020-08-17、2020-08-18作为dataframe@lakesh如果所有过期值都没有超过8月16日,那么如何进行预测?这些值将为0,因为桌面上没有使用该值day@lakesh只要存在与任何桌子相关的任何值,数据框就会继续,因此,如果任何办公桌处于活动状态,您将得到五天的预测。如果没有带任何值的桌子,那么您的预测将为零。在新的示例数据框中,最后一个输出日期是8月16日,因此在此之后没有值。还是我误解了你?在新的例子中,最后一个日期是8月17日,而不是8月16日。因此,8月17日以后,所有办公桌都将为零。