Расчеты по более чем двум различным фреймам данных в R - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь перенести некоторую работу, ранее проделанную в 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%.

1 Ответ

0 голосов
/ 11 октября 2018
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.

...