我无法复制将列表应用于事件(或计数)的方法。

我一直在玩弄rowSums(),但我不知道如何在多个列上以一般方式使用它,也应该乘以等级(请参见下面的rank.list)

我的数据如下所示,我想做的是:


1)计算每列的出现次数(一种通讯方式)
2)将该数字乘以给定的等级。因此,一个特定的事件可能给出+1、0或-1。
3)这将导致所讨论的列中的rowSums()(?)。


示例:前4列,第4行:

Bewustwording(1x +1)+对抗(2x -1)+ Coordinerend(17x +1)等于1-2 + 17 = 18

       Bewustwording Confrontatie Confrontatie.Outside Coordinerend Delegerend Goedaardig Grappig
1              1            0                    0            1          6          3       0
2              0            1                    0            3          3          0       1
3              1            0                    0            6          2          5       0
4              1            2                    0           17         22          4       0
5              0            0                    0            2          0          0       0
6              0            0                    0            4          9          7       2
7              0            0                    0           10          6          3       0
8              0            1                    0            6          1          2       1
9              1            1                    0           14         15          9       1
10             1            2                    0            9         11          1       1


我们想使用这种积极/消极的归因,以便确定某种给定形式的交流是否比其他情况更加存在。相当基本,但由于我们正在与许多不同的组(或子集)一起工作,因此可以继续进行更有趣的假设。

理想情况下,我将此列表放在(或任何)数据上,这将萌芽具有新值(在上面的示例中为18)的新列。有时,排名值可能会更改或必须更正,应用更改不应花费太多精力。完成此操作后,我可能不会再这样做了,因此对其他人来说是简单的方法。但是,对于如何:)仍然一无所知

> rank.list
                 Action rank
1         Bewustwording    1
2          Confrontatie   -1
3  Confrontatie.Outside   -1
4          Coordinerend    1
5            Delegerend    1
6            Goedaardig    1
7               Grappig    1
8              Hofmaken    1
9           Instruerend    1
10         Onderwijzend    1
11           Ontbindend    0
12              Protest   -1
13             Reactief    0
14     Respons.Negatief   -1
15     Respons.Neutraal    0
16     Respons.Positief    1
17             Sign-out    0
18             Time-out    0
19             Volgzaam    1
20              Vragend    1


输出:理想情况下输出,例如排名(前2行)

       Bewustwording Confrontatie Confrontatie.Outside Coordinerend   Ranking
1              1            0                    0            1          2
2              0            1                    0            3          2

最佳答案

假设我们正在计算各行的加权和,那么简单的apply就足够了:

## weighted sums by rows
dat$Ranking <- apply(dat, 1, function(x, weight) sum(weight * x), weight = rank.list$rank)
dat
#>    Bewustwording Confrontatie Confrontatie.Outside Coordinerend Delegerend
#> 1              1            0                    0            1          6
#> 2              0            1                    0            3          3
#> 3              1            0                    0            6          2
#> 4              1            2                    0           17         22
#> 5              0            0                    0            2          0
#> 6              0            0                    0            4          9
#> 7              0            0                    0           10          6
#> 8              0            1                    0            6          1
#> 9              1            1                    0           14         15
#> 10             1            2                    0            9         11
#>    Goedaardig Grappig Ranking
#> 1           3       0      11
#> 2           0       1       6
#> 3           5       0      14
#> 4           4       0      42
#> 5           0       0       2
#> 6           7       2      22
#> 7           3       0      19
#> 8           2       1       9
#> 9           9       1      39
#> 10          1       1      21




或者,通过获取data.frame和权重向量之间的矩阵乘积来获取Ranking列:

as.matrix(dat) %*% rank.list$rank
#>       [,1]
#>  [1,]   11
#>  [2,]    6
#>  [3,]   14
#>  [4,]   42
#>  [5,]    2
#>  [6,]   22
#>  [7,]   19
#>  [8,]    9
#>  [9,]   39
#> [10,]   21


数据

注意:由于data.frame不包含rank.list中列出的所有列,因此仅使用rank.list的前几行。

## data
dat <- structure(list(Bewustwording = c(1L, 0L, 1L, 1L, 0L, 0L, 0L,
0L, 1L, 1L), Confrontatie = c(0L, 1L, 0L, 2L, 0L, 0L, 0L, 1L,
1L, 2L), Confrontatie.Outside = c(0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), Coordinerend = c(1L, 3L, 6L, 17L, 2L, 4L, 10L, 6L,
14L, 9L), Delegerend = c(6L, 3L, 2L, 22L, 0L, 9L, 6L, 1L, 15L,
11L), Goedaardig = c(3L, 0L, 5L, 4L, 0L, 7L, 3L, 2L, 9L, 1L),
    Grappig = c(0L, 1L, 0L, 0L, 0L, 2L, 0L, 1L, 1L, 1L), Ranking = c(11L,
    6L, 14L, 42L, 2L, 22L, 19L, 9L, 39L, 21L)), row.names = c(NA,
-10L), class = "data.frame")

## weights
rank.list <- structure(list(Action = c("Bewustwording", "Confrontatie", "Confrontatie.Outside",
"Coordinerend", "Delegerend", "Goedaardig", "Grappig"), rank = c(1L,
-1L, -1L, 1L, 1L, 1L, 1L)), row.names = c(NA, 7L), class = "data.frame")

关于r - R-计算发生次数并乘以等级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57578044/

10-12 17:26