изменить цену dplyr * кол-во, используя учетные записи компаний из строк - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующие данные компании, и я пытаюсь рассчитать цену * кол-во из строки.У меня проблема в том, что я не могу получить доступ к значениям в строках, используя dplyr.

x %>%
  group_by(firm) %>%
  select(Var) %>%
  mutate(revenues = price*qty)

Здесь функция mutate() ищет имена столбцов price и qty.

Любой совет о том, как мне следует форматировать данные, был бы полезен (я полагаю, что может быть лучший способ обработки данных).

df <- structure(list(firm = c("firm1", "firm1", "firm1", "firm2", "firm2", 
"firm2"), Var = c("price", "qty", "package", "price", "qty", 
"package"), `2018-03` = c("199309", "10901", "210210", "25370", 
"4535", ""), `2017-03` = c("143736", "7065", "150801", "21374", 
"", "652"), `2016-03` = c("106818", "8878", "115696", "11738", 
"", "451"), `2015-03` = c("108193", "17806", "125999", "11163", 
"", "256"), `2014-03` = c("33045", "12029", "45074", "16006", 
"", "191"), `2013-03` = c("30396", "2919", "33315", "4952", "", 
"208"), `2012-03` = c("16857", "5480", "22337", "1315", "", "97"
), `2011-12` = c("3433", "8219", "11652", "559", "", ""), `2010-12` = c("3254", 
"6803", "10057", "94", "", ""), `2009-12` = c("2749", "4518", 
"7266", "38", "", "")), .Names = c("firm", "Var", "2018-03", 
"2017-03", "2016-03", "2015-03", "2014-03", "2013-03", "2012-03", 
"2011-12", "2010-12", "2009-12"), row.names = 5:10, class = "data.frame")

1 Ответ

0 голосов
/ 18 сентября 2018

Есть две проблемы:

  • столбцы, которые должны быть числовыми, на самом деле являются символьными
  • , столбцы price и qty отсутствуют, поэтому использовать mutate нельзяумножить такие несуществующие столбцы вместе

Чтобы решить эту проблему, преобразуйте столбцы, имена которых начинаются с 2, в числовые и затем измените форму данных, используя gather и spread, чтобы столбцы были какпоказано ниже, а не столбец для каждого года / месяца.На данный момент у нас есть столбцы price и qty, поэтому выполните вычисления.

library(dplyr)
library(tidyr)

df %>% 
  mutate_at(vars(starts_with("2")), as.numeric) %>% 
  gather(date, value, -firm, -Var) %>% 
  spread(Var, value) %>% 
  mutate(revenue = price * qty)

, что дает:

    firm    date package  price   qty    revenue
1  firm1 2009-12    7266   2749  4518   12419982
2  firm1 2010-12   10057   3254  6803   22136962
3  firm1 2011-12   11652   3433  8219   28215827
4  firm1 2012-03   22337  16857  5480   92376360
5  firm1 2013-03   33315  30396  2919   88725924
6  firm1 2014-03   45074  33045 12029  397498305
7  firm1 2015-03  125999 108193 17806 1926484558
8  firm1 2016-03  115696 106818  8878  948330204
9  firm1 2017-03  150801 143736  7065 1015494840
10 firm1 2018-03  210210 199309 10901 2172667409
11 firm2 2009-12      NA     38    NA         NA
12 firm2 2010-12      NA     94    NA         NA
13 firm2 2011-12      NA    559    NA         NA
14 firm2 2012-03      97   1315    NA         NA
15 firm2 2013-03     208   4952    NA         NA
16 firm2 2014-03     191  16006    NA         NA
17 firm2 2015-03     256  11163    NA         NA
18 firm2 2016-03     451  11738    NA         NA
19 firm2 2017-03     652  21374    NA         NA
20 firm2 2018-03      NA  25370  4535  115052950
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...