Вычесть одну категорию из другой на четверть в R - PullRequest
0 голосов
/ 09 июля 2020

Я хочу вычесть продажи для каждой категории за квартал (только за один год) с вычитанием первого квартала из 10

        Qtr    Category         Value 
202001      1             10    
202002      1             40    
202003      1             100    
202004      1             20     
202001      2             80    
202002      2             90    
202003      2             4    
202004      2             7    
201901      1             8
201902      1             9
201903      1             20
20194       1             30

Результаты:

        Qtr    Name         Value 
202001      1             0    
202002      1             30    
202003      1             60    
202004      1             -80    
202001      2             70    
202002      2             10    
202003      2             -86    
202004      2             3    
201901      1             -2
201902      1             1
201903      1             11
20194       1             10

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Вот мое решение, использующее тидиверс. Для начала я импортирую ваши данные, которые я сохранил в fa.txt, исправляю последнее значение в столбце Quarter и конвертирую столбец Value из целого числа в число c.

library(tidyverse)

df <- read.table("fa.txt", header = TRUE)

df[df$Qtr == 20194, "Qtr"] <- 201904
df$Value <- as.numeric(df$Value)

df <- df %>%
  mutate(interm = str_replace(Qtr, "(\\d{2})$", ".\\1")) %>%
  separate(interm, c("Year", "Quarter"), "\\.") %>%
  group_by(Year, Category) %>%
  mutate(New_Value = if_else(Quarter == "01", Value - 10, Value - lag(Value)))
1 голос
/ 09 июля 2020

Вот базовое решение R с ave.

with(df1, ave(Value, Category, FUN = function(x){c(x[1] - 10, diff(x))}))
# [1]   0  30  60 -80  70  10 -86   3 -12   1  11  10

Затем присвойте этот результат соответствующему столбцу набора данных.

Data

df1 <- read.table(text = "
        Qtr    Category         Value 
202001      1             10    
202002      1             40    
202003      1             100    
202004      1             20     
202001      2             80    
202002      2             90    
202003      2             4    
202004      2             7    
201901      1             8
201902      1             9
201903      1             20
201904       1             30
", header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...