Создайте линию спроса в R, которая растет с инфляцией

Мне нужно создать синюю галочку на R. В основном у меня есть информация о значениях, выделенных красным и желтым цветом для разных компаний. Мне нужно написать код, который делает: какой бы ни была сумма желтого и красного в 2022 году для компании x, синяя линия компании x должна начинаться с этого значения, а затем увеличиваться на 2–3 % каждый год (вот почему это так тик). Кто-нибудь может помочь, пожалуйста? Примером может служить компания, у которой в 2022 году 20 красных и 10 желтых. В этом случае синяя линия должна начинаться с 30 в 2022 г., 30* 1,02 или 1,03 в 2023 г. и т. д. Извините, что не добавляю базу данных, но я не уверен, могу ли я поделиться ею на законных основаниях. Так что любой был бы так любезен, чтобы помочь, было бы здорово.

Создайте линию спроса в R, которая растет с инфляцией

Пример:

2022 100 Красный
A 2022 20 Желтый
А 2022 120 (100+20) Синий
2023 100 Красный
А 2023 50 Желтый
А 2023 120*1,02 Синий
А 2024 130 Красный
А 2024 55 Желтый
А 2024 120*1,02*1,02 Синий

С каждым годом первоначальная сумма желтого и красного в 2022 году увеличивается на 2%.

Не могли бы вы использовать искусственные данные, как вы предоставили текст в виде кода. Может быть, просто Dataframe с входами и целевым выходом. Я лично не понимаю, что вы имеете в виду под «2% или 3%». Как узнать, какой процент брать? это еще один ввод?

Sandwichnick 17.03.2022 13:40

синяя линия не начинается с суммы красного и желтого в примере. Он начинается примерно на уровне красного.

langtang 17.03.2022 13:41

@langtang начинается с 2021 года, но в этом примере нет желтых данных

PCRL 17.03.2022 13:43

@Sandwichnick добавил пример для одной компании, помогло? благодарю вас

PCRL 17.03.2022 13:48

Итак, желтый здесь добавляется к красному... в вашем текстовом примере желтый постоянно меньше, чем красный, но на изображении желтый выше, чем красный, так что я думаю, вы имеете в виду, что желтый цвет на графике добавляется к (укладывается на ) красный

langtang 17.03.2022 14:00

@langtang в основном суммирует красный + желтый в 2022 году, а затем берет это значение 2022 года и увеличивает его на 2% в год на протяжении многих лет.

PCRL 17.03.2022 14:20

ок, извините, что запутался. Получить значение синего очень просто — см. ниже. Если вам нужна помощь с графикой, дайте нам знать.

langtang 17.03.2022 14:29

@langtang, то, что ты сделал, великолепно и очень помогает, спасибо. Одна вещь: у меня более одной компании, то есть не только A, но и B, и C... и т. д. Поэтому мне нужна синяя линия для каждой компании. Не беспокойтесь о графике, мне просто нужно иметь начальное значение 2022 года и соответствующий рост для каждой компании.

PCRL 17.03.2022 15:22

конечно, добавлено в ответ ниже

langtang 17.03.2022 15:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если d — это ваши данные (скажем, для нескольких компаний), то получить синие данные для каждой компании несложно.

inner_join(
  d, d %>% 
    filter(y==2022) %>% 
    mutate(blue=red+yellow) %>% 
    select(company, blue),
  by = "company"
) %>% 
  mutate(blue = blue*(1.02^(y-2022)))

# A tibble: 6 x 5
  company     y   red yellow  blue
  <chr>   <int> <dbl>  <dbl> <dbl>
1 A        2022   100     20  120 
2 A        2023   100     50  122.
3 A        2024   130     55  125.
4 B        2022   200     15  215 
5 B        2023   205     18  219.
6 B        2024   210     30  224.

Входные данные:

d = tibble(
  company=c(rep("A",3),rep("B",3)),
  y = rep(2022:2024,2),
  red= c(100, 100, 130, 200, 205, 210),
  yellow = c(20, 50,55, 15,18, 30)
)

Вот расширенный пример построения графика с использованием поддельных данных, который пытается приблизиться к графику в исходном сообщении. Если d ваши данные для красного и желтого (см. ниже структуру/генерацию d), то вы можете:

  1. Создайте синие данные
base = colSums(d[d$year==2022,2])
blue_data = tibble(year=2022:2040) %>%
  mutate(value=base*(1.02^(year-2022)), 
         group = "blue", 
         plotmax = base*(1.03^(year-2022)),
         plotmin = value)
  1. Манипулируйте d и blue_data для создания данных графика
# create plot data
plot_data <- rbind(
  d %>% mutate(
    plotmax = c(
      d %>% filter(group= = "red") %>% pull(value),
      d %>% filter(year>=2021) %>% group_by(year) %>% summarize(value=sum(value)) %>% pull(value)),
    plotmin = c(
      rep(0,times=nrow(d %>% filter(group= = "red"))),
      d %>% filter(year>=2021, group= = "red") %>% pull(value)
      ),
  blue_data
)
  1. Постройте данные в plot_data
manual_values = c("red" = "red", "blue" = "blue", "yellow" = "yellow")
ggplot(plot_data, aes(x=year, color=group,fill=group)) + 
  geom_ribbon(aes(ymin=plotmin, ymax=plotmax)) + 
  scale_color_manual(values=manual_values)+
  scale_fill_manual(values=manual_values) + 
  theme(legend.position='bottom')

mfta

Входные данные (d)

structure(list(year = c(2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2021L, 2022L, 2023L, 2024L, 2025L, 2026L, 2027L, 2028L, 2029L, 
2030L, 2031L, 2032L, 2033L, 2034L, 2035L, 2036L, 2037L, 2038L, 
2039L, 2040L, 2021L, 2022L, 2023L, 2024L, 2025L, 2026L, 2027L, 
2028L, 2029L, 2030L, 2031L, 2032L, 2033L, 2034L, 2035L, 2036L, 
2037L, 2038L, 2039L, 2040L), value = c(220, 242.857142857143, 
265.714285714286, 288.571428571429, 311.428571428571, 334.285714285714, 
357.142857142857, 380, 360, 352.941176470588, 345.882352941176, 
338.823529411765, 331.764705882353, 324.705882352941, 317.647058823529, 
310.588235294118, 303.529411764706, 296.470588235294, 289.411764705882, 
282.352941176471, 275.294117647059, 268.235294117647, 261.176470588235, 
254.117647058824, 247.058823529412, 240, 0, 5, 10, 15, 20, 25, 
30, 35, 40, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50), group = c("red", 
"red", "red", "red", "red", "red", "red", "red", "red", "red", 
"red", "red", "red", "red", "red", "red", "red", "red", "red", 
"red", "red", "red", "red", "red", "red", "red", "yellow", "yellow", 
"yellow", "yellow", "yellow", "yellow", "yellow", "yellow", "yellow", 
"yellow", "yellow", "yellow", "yellow", "yellow", "yellow", "yellow", 
"yellow", "yellow", "yellow", "yellow")), row.names = c(NA, -46L
), class = c("tbl_df", "tbl", "data.frame"))

Другие вопросы по теме