Несколько местных жителей на одной строке?

Вот базовое решение R с использованием by.

by(df, df$FlightID, function(x) c(NA, exp(-diff(log(x$FareValue)))))
#df$FlightID: YULCDG215135
#[1]        NA 0.6666667 0.7500000 0.2000000
#------------------------------------------------------------
#df$FlightID: YULCDG215136
#[1]        NA 0.6000000 0.7407407 0.3000000

Или, альтернативно, используя ave

transform(df, ratio = ave(FareValue, FlightID, FUN = function(x) c(NA, exp(-diff(log(x))))))
#      FlightID FareClass FareClassRank FareValue Bookings     ratio
#1 YULCDG215135         Q             1       100        5        NA
#2 YULCDG215135         X             2       150        7 0.6666667
#3 YULCDG215135         V             3       200        4 0.7500000
#4 YULCDG215135         Y             4      1000        2 0.2000000
#5 YULCDG215136         Q             1       120        1        NA
#6 YULCDG215136         X             2       200        4 0.6000000
#7 YULCDG215136         V             3       270        5 0.7407407
#8 YULCDG215136         Y             4       900       15 0.3000000

Хитрость в обоих случаях заключается в лог-преобразовании FareValue, так что мы можем использовать diff, а затем инвертировать преобразование ( используя exp), чтобы получить соотношение.

26
задан Phrogz 30 October 2012 в 21:40
поделиться

2 ответа

Оба являются местными.

25
ответ дан 28 November 2019 в 07:26
поделиться

Обе переменные являются локальными, и обе они имеют значение nil.

Чтобы присвоить им 2 разных значения, просто:

local var1,var2 = 1,2
15
ответ дан Phrogz 28 November 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: