处理R中数据框中的列表

时间:2018-04-21 15:25:16

标签: r list dataframe

我在计算每家公司产生的利润时遇到了麻烦。 例如:考虑以下数据集

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中实现这一目标吗? production_company是一个列表,因此不列出该列没有帮助。

1 个答案:

答案 0 :(得分:1)

由于您没有提到您的数据结构,我假设其数据框中的列结构为列表。如果是这种情况,您可以试试这个。

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