R 计算各行的加权分数

R 计算各行的加权分数,r,R,我正在寻找一种更优雅的方法来计算7列的加权分数,如下所示 每列代表一个条件分数(从1到7),观察值代表在该分数处观察到的百分比(每行总和必须为1) 加权分数只是每行变量的总和乘以其条件分数 创建数据集: rand.sum <- function(n) { x <- sort(runif(n-1)) c(x,1) - c(0,x) } df <- t(replicate(10,rand.sum(7))) colnames(df)<-c(1:7) # Change

我正在寻找一种更优雅的方法来计算7列的加权分数,如下所示

每列代表一个条件分数(从1到7),观察值代表在该分数处观察到的百分比(每行总和必须为1)

加权分数只是每行变量的总和乘以其条件分数

创建数据集:

rand.sum <- function(n) {
  x <- sort(runif(n-1))
  c(x,1) - c(0,x)
}

df <- t(replicate(10,rand.sum(7)))
colnames(df)<-c(1:7) # Change the column names to reflect condition value
df <- as.data.frame(df)
df$weightedCondScore <- ((df[,1]) * 1) + ((df[,2]) * 2) + 
                        ((df[,3]) * 3) + ((df[,4]) * 4) + 
                        ((df[,5]) * 5) + ((df[,6]) * 6) + 
                        ((df[,7]) * 7)

rand.sum一个简单的方法是将其视为矩阵乘以向量

M = as.matrix(df)
M %*% 1:ncol(M)

如果您希望为快速任务构建函数,则可以使用
apply
family函数跨列加权值,然后使用
rowSums
将分数分配回数据框

加权百分比
变异(id=行号())%>%
聚集(键=权重,值=值,-id)%>%
变异(重量=数值(重量))%>%
分组依据(id)%>%
变异(wtd_分数=总和(值*权重))%>%
排列(键=重量,值=值)%>%
总目(3)
#>#tibble:3 x 9
#>#组:id[3]
#>id wtd_得分为'1``2``3``4``5``6``7`
#>                     
#> 1     1      3.58 0.264  0.198  0.0508 0.0155 0.171 0.249  0.0508
#> 2     2      4.15 0.0640 0.0960 0.334  0.111  0.144 0.0295 0.221 
#> 3     3      5.24 0.116  0.0439 0.0548 0.102  0.148 0.0205 0.515
由(v0.2.1)于2019-03-26创建