R рассчитать чистую торговую стоимость - PullRequest
0 голосов
/ 23 февраля 2019
library(tidyverse)
data=tibble(lender=c('Tony','Wood','Tony','Tidy'),borrower=c('Wood','Tony','Wood','Tony'),amount=c(1,2,3,4))

enter image description here

Это простая таблица.Я хочу рассчитать сумму нетто для Тони.

Например, в первом ряду Тони ссудить Вуд 1, поэтому его следует пометить как -1.

Ряд 2, Вуд ссудить Тони2, для Тони, это + 2

Строка 3, -3

Строка 4, + 4

Две проблемы

  1. Рассчитать общую сумму нетто Тони.Это должно быть -1 + 2-3 + 4.Как мне кодировать в R?

  2. Рассчитать общую сумму нетто только между Тони и Вудом в точке Тони.Таким образом, строка 4 не связана и должна игнорироваться.Торговый баланс между Тони и Вудом составляет -1 + 2-3.Как его кодировать?

Примечание: это большие данные.Карта (purrr) является предпочтительной, если вы не должны использовать для цикла.И оригинальные суммы все положительные.Таким образом, вы должны изменить его при необходимости.

1 Ответ

0 голосов
/ 23 февраля 2019

Вот подход к первой части, который должен быть довольно быстрым.Собрав, мы получаем две строки для каждой ссуды, по одной для каждой роли, а затем просто переворачиваем знак суммы в зависимости от роли, и group_by-summaize, чтобы получить чистые заимствования каждого актера.

data %>%
  gather(role, name, -amount) %>%
  mutate(net = if_else(role == "borrower",
                       amount,
                       -amount)) %>%
  group_by(name) %>%
  summarize(net = sum(net))

## A tibble: 3 x 2
#  name    net
#  <chr> <dbl>
#1 Tidy     -4
#2 Tony      2
#3 Wood      2

Дляво второй части я использовал этот ответ для создания алфавитного спаривания заемщика и кредитора, а затем выполнил аналогичное суммирование.

data %>%
  rowwise() %>%
  mutate(pair = paste(sort(c(lender, borrower)), collapse = " - "),
         net  = if_else(lender < borrower,
                        amount,
                        -amount)) %>%
  ungroup() %>%
  group_by(pair) %>%
  summarize(net = sum(net))

## A tibble: 2 x 2
#  pair          net
#  <chr>       <dbl>
#1 Tidy - Tony     4
#2 Tony - Wood     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...