使用变异和汇总在向量中查找元素

时间:2019-04-16 13:33:35

标签: r dplyr

我正在尝试用R代码替换vba代码。当前在vba中,我在一定范围内使用sumif来查找ID的总值,具体取决于某些日期。在R中,我使用mutate一个摘要,但总会出现错误。我不知道该如何解决。

如果我想找到ID = 1的值,该值在2天之内就产生了一些价值:

#sys.Date() = 2016-01-06

df

DATES       ID  VALUE
2016/01/01  1   10
2016/01/02  2   15
2016/01/05  1   13

the result must be:

ID Value
 1  13

当前,代码为:

df%>%
group_by(ID) %>%
  mutate(Total_op = if (Sys.Date()-as.Date(Dates,format="%YYYY-%mm- 
  %dd")>=1) Value else 0)))%>%
  summarize(SumTotal = sum(Total_op))%>%  
  collect

但是显示的错误是:

  

错误:列'sumTotal'必须为长度X(组大小)或一个,而不是Y

1 个答案:

答案 0 :(得分:3)

使用lubridate,我们可以将DATES字符串转换为datetime对象,并进行相应的过滤:

library(lubridate)
library(tidyverse)

Dat <- ymd("2016-01-06") #Set a date. Can be done by Sys.Date()

df %>%
  mutate_at("DATES",ymd) %>% #convert to datetime
  filter(DATES %within% interval(Dat-2,Dat)) %>%  #filter entries in the last 2 days
  group_by(ID) %>% #group by ID
  summarise(SumTotal = sum(VALUE)) #summarise value as Sum