带条件的R中的Sumif

带条件的R中的Sumif,r,R,我想在R中做一个条件和,我有一个如下的表格。有了这些数据,我想对未来5天每个办公桌的总价值进行预测。值应包含从开始日期到结束日期的日期 +-------+------------+-------+-------+------------+------+ | Index | Date | Desk | Value | Out_date | Days | +-------+------------+-------+-------+------------+------+ |

我想在R中做一个条件和,我有一个如下的表格。有了这些数据,我想对未来5天每个办公桌的总价值进行预测。值应包含从开始日期到结束日期的日期

+-------+------------+-------+-------+------------+------+
| 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日以后,所有办公桌都将为零。