Вычисление фиксированных эффектов отправления-назначения с помощью R

Я использую уравнение гравитации с различными типами фиксированных эффектов. Фиксированный эффект источника, фиксированный эффект пункта назначения и фиксированный эффект пары исходный пункт-пункт назначения.

Рассмотрим следующий пример

require(dplyr)
mydf <- data_frame(orig = rep(LETTERS[1:3], each = 3),
                   dest = rep(LETTERS[1:3], times = 3))

Фиксированные эффекты отправления и назначения могут быть созданы с использованием факторов

mydf <- mutate(mydf,
               orig_fe = factor(orig),
               dest_fe = factor(dest))

Теперь я хочу выполнить ту же операцию с парами исходная и конечная точки. Например, комбинация AB должна иметь то же значение, что и комбинация BA. Конечно, эта переменная тоже должна быть фактором.

Ожидаемый результат следующий

mydf$pair_fe = as.factor(c('AA', 'AB', 'AC', 'AB', 'BB', 'BC', 'AC', 'BC', 'CC'))

mydf

#      orig  dest orig_fe dest_fe pair_fe
#     (chr) (chr)  (fctr)  (fctr)  (fctr)
# 1     A     A       A       A      AA
# 2     A     B       A       B      AB
# 3     A     C       A       C      AC
# 4     B     A       B       A      AB
# 5     B     B       B       B      BB
# 6     B     C       B       C      BC
# 7     C     A       C       A      AC
# 8     C     B       C       B      BC
# 9     C     C       C       C      CC

person goclem    schedule 24.11.2015    source источник


Ответы (1)


Мы можем использовать pmax и pmin, чтобы получить максимальное и минимальное значения по строкам, затем paste векторы вместе и преобразовать в класс factor.

mydf %>% 
     mutate(pair_fe= factor(paste0(pmin(orig,dest), pmax(orig,dest))))
#    orig  dest orig_fe dest_fe pair_fe
#   (chr) (chr)  (fctr)  (fctr)  (fctr)
#1     A     A       A       A      AA
#2     A     B       A       B      AB
#3     A     C       A       C      AC
#4     B     A       B       A      AB
#5     B     B       B       B      BB
#6     B     C       B       C      BC
#7     C     A       C       A      AC
#8     C     B       C       B      BC
#9     C     C       C       C      CC
person akrun    schedule 24.11.2015
comment
Спасибо, акрун! Это именно то, что я искал. Про pmin и max не знал :) - person goclem; 24.11.2015