计算R中数据帧列表中的Herfindahl索引

时间:2018-05-22 20:37:44

标签: r

我将以下数据存储在列表中:

set.seed(12345)
df1 = data.frame(replicate(10,sample(0:500,100,rep=TRUE)))
df2 = data.frame(replicate(10,sample(0:500,100,rep=TRUE)))
list = list(df1, df2)

如何执行以下操作:

1)对于每一列,获取列总和中每个元素的份额(即每个元素除以列总数),然后平均份额

2)取步骤1中每列的总和

然后,输出将是2个向量的列表(df1和df2各有一个),每个向量包含10个分数。

我的代码(如下所示)似乎不起作用。任何的建议都受欢迎。非常感谢提前!

 do.call(cbind,lapply(list, function(x) {
 x1 <- ((x/colSums(x))^2)[col(x)]
 sapply(x1, function(y) sum(y))}))

1 个答案:

答案 0 :(得分:0)

dplyr中,您可以使用mutate_all将函数应用于所有列。然后,您可以使用funs生成要评估的函数。最后,您可以使用colSums

对所有列进行汇总
library(dplyr)
df1 %>% mutate_all(funs((./sum(.))^2)) %>% colSums

#     X1         X2         X3         X4         X5         X6         X7         X8         X9        X10 
# 0.01346280 0.01247748 0.01348066 0.01246220 0.01310924 0.01279258 0.01316828 0.01322423 0.01340310 0.01294876