我正在尝试用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
答案 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