我在计算每家公司产生的利润时遇到了麻烦。 例如:考虑以下数据集
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是一个列表,因此不列出该列没有帮助。
答案 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