Сбросить значение Y до желаемого значения с помощью переменной ONE x - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь сбросить значение Y с одной важной переменной.

Y начинается со значения 2,4, а конечная точка равна 1,7. Проблема в том, что я не знаю данных между 2,4 и 1,7. (Единственная подсказка - это всегда зависит от значения X и падает до 1.7)

Если значение X большое, Y должно упасть больше. (Значение X находится в диапазоне от 0 до 8).

Если оно маленькое, оно должно меньше падать.

Кто-нибудь может дать совет? или способ выполнить?

Ниже приведен пример данных.

Y     X
2.4   1   
?     7  
?     3
?     5
?     8 
1.7   3

1 Ответ

0 голосов
/ 14 января 2019

Один путь будет:

start = 2.4
end = 1.7

df$Y <- c(start, start - cumsum(df$X[-1] * (start - end)/sum(df$X[-1])))

#  X        Y
#1 1 2.400000
#2 7 2.211538
#3 3 2.130769
#4 5 1.996154
#5 8 1.780769
#6 3 1.700000

Давайте разберемся с этим. df$X - это числа, определяющие величину падения

df$X
#[1] 1 7 3 5 8 3

Когда мы делаем

(start - end)/sum(df$X[-1])
#[1] 0.02692308

Это дает нам, сколько составляет 1 единица падения. Мы игнорируем первое значение, так как у нас уже есть это число (2.4), и мы не хотим принимать это в расчет.

Теперь мы умножим его на X, так что когда число равно 7, мы получим большее падение, когда оно равно 1, падение будет ниже

df$X[-1] * (start - end)/sum(df$X[-1])
#[1] 0.18846154 0.08076923 0.13461538 0.21538462 0.08076923

Когда вы сравните это с df$X, вы заметите, что

0.02692308 * 7 = 0.1884615
0.02692308 * 3 = 0.08076923
0.02692308 * 5 = 0.1346154

и т. Д.

Наконец, мы берем кумулятивную сумму (cumsum), складывая все эти числа, которые мы вычитаем из start, так что теперь у нас есть относительные падения в соответствии с соответствующими X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...