我将以下数据存储在列表中:
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))}))
答案 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