Расчеты по более чем двум разным фреймам данных в R

Я пытаюсь перенести некоторую работу, ранее выполненную в Excel, в R. Все, что мне нужно сделать, это преобразовать две основные формулы count_if в читаемый сценарий R. В Excel я бы использовал три таблицы и рассчитывал их с помощью методов «укажи и щелкни», но теперь я потерялся в том, как я должен обращаться к этому в R.

Мои исходные фреймы данных большие, поэтому для этого вопроса я разместил образцы фреймов данных:

OperatorData <- data.frame(
                    Operator = c("A","B","C"),
                    Locations = c(850, 575, 2175)
 )

AreaData <- data.frame(
              Area = c("Torbay","Torquay","Tooting","Torrington","Taunton","Torpley"),
              SumLocations = c(1000,500,500,250,600,750)
 )

OperatorAreaData <- data.frame(
              Operator = c("A","A","A","B","B","B","C","C","C","C","C"),
              Area = c("Torbay","Tooting","Taunton",
                       "Torbay","Taunton","Torrington",
                       "Tooting","Torpley","Torquay","Torbay","Torrington"),
              Locations = c(250,400,200,
                            100,400,75,
                            100,750,500,650,175)
 )

Что я пытаюсь сделать, так это добавить два новых столбца в фрейм данных OperatorData: один, указывающий количество областей, в которых работает оператор, и другой, указывающий, сколько областей, в которых работает этот оператор, и владеет более более 50% локаций.

Таким образом, новый результирующий кадр данных будет выглядеть так:

Operator     Locations   AreaCount    Own_GE_50percent
A            850         3            1
B            575         3            1
C            2715        5            4

До сих пор мне удалось вычислить первый столбец, используя табличную функцию, а затем добавить:

OpAreaCount <- data.frame(table(OperatorAreaData$Operator))
names(OpAreaCount)[2] <- "AreaCount"
OperatorData$"AreaCount" <- cbind(OpAreaCount$AreaCount)

Это довольно просто, но я застрял в том, как вычислить вычисление второго столбца с условием 50%.


person Pryore    schedule 11.10.2018    source источник
comment
Можете ли вы объяснить, как рассчитывается ваш последний столбец? Почему 1, 1, 4?   -  person AntoniosK    schedule 11.10.2018
comment
Этот столбец рассчитывается путем подсчета количества областей, в которых оператору принадлежит более 50% местоположений. В качестве примера: оператор А работает в 1 области, в которой ему принадлежит более 50% местоположений. Итак, в Тутинге 500 локаций, а оператор «А» владеет 400 (80%) локациями в Тутинге. Но в Торбее и Тонтоне ему принадлежит менее 50%, так что счет только 1.   -  person Pryore    schedule 11.10.2018


Ответы (1)


library(dplyr)

OperatorAreaData %>%
  inner_join(AreaData, by="Area") %>%
  group_by(Operator) %>%
  summarise(AreaCount = n_distinct(Area),
            Own_GE_50percent = sum(Locations > (SumLocations/2)))

# # A tibble: 3 x 3
#   Operator AreaCount Own_GE_50percent
#   <fct>        <int>            <int>
# 1 A                3                1
# 2 B                3                1
# 3 C                5                4

Вы можете использовать AreaCount = n(), если уверены, что у вас есть уникальные значения Area для каждого Operator.

person AntoniosK    schedule 11.10.2018