Использование мутирования и суммирования для поиска элементов в векторе - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь заменить код VBA на код R. В настоящее время в VBA я использую Sumif в диапазоне, чтобы найти общее значение идентификатора в зависимости от некоторых дат. В 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 Ответ

3 голосов
/ 16 апреля 2019

С помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...