我无法复制将列表应用于事件(或计数)的方法。
我一直在玩弄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/