Обработка списка в dataframe в R

Anushree Mahajan спросил: 28 марта 2018 в 01:45 в: r

Я нахожу затруднение при расчете прибыли, создаваемой каждой компанией. Ех: Рассмотрим следующий набор данных

Production company  Profits
A                    35000
c(B,C)               15000
D                   750000
c(E,F,G)            100000

Мне нужно разработать способ, чтобы полученные прибыли делились поровну среди каждой компании. Ожидаемый результат:

Production company  Profits
A                     35000
B                      7500
C                      7500
D                    750000
E                     33333
F                     33333
G                     33333

Может ли кто-нибудь помочь мне в достижении этого в R? Product_company - это список, поэтому не нужно сортировать столбцы.

1 ответ

Есть решение
PKumar ответил: 28 марта 2018 в 02:47

Поскольку вы не упомянули свою структуру данных, я предполагаю, что это фрейм данных, в котором столбцы структурированы в виде списка. В этом случае вы можете попробовать это.

library(tidyverse)

Игрушечный пример: -

df <- data.frame(val = c(1000, 7600, 2000))
df$pc <- list("A",c("B","C"), "D")

Решение : -

Взяв набор входных данных, используйте функцию lengths (не путать с длиной), чтобы определить количество элементов, заключенных в эту строку желаемый столбец. Разделите столбец значений на количество возвращаемых элементов (в данном случае 7600 делится на 2), поскольку это векторизованная операция, это будет сделано для каждой строки. Выберите желаемые столбцы в качестве конечного результата.

df %>% 
    mutate(newval = val/lengths(.$pc)) %>% 
    unnest(pc)%>% 
    select(pc, newval)
Выход:
  #    pc newval
  #  1  A   1000
  #  2  B   3800
  #  3  C   3800
  #  4  D   2000