我想使用 dplyr 来计算一个主题的每次访问的两个因素的比率向量。可以在下面创建模拟数据:

subj = c(rep("A", 10), rep("B", 4), rep("C", 6))
vist = c(rep(c("C0", "C1", "C2", "C3", "C4"), each=2),
         rep(c("C0", "C1"), each=2),
         rep(c("C0", "C1", "C2"), each=2))
factor = c(rep(c("L", "N"), 5), rep(c("L", "N"), 2), rep(c("L", "N"), 3))
set.seed(111)
aval = round(rnorm(n = 20, 0, 1), 2)

dat = data.frame(subj, vist, factor, aval, stringsAsFactors = FALSE)
dat

看起来像:
   subj vist factor  aval
1     A   C0      L  0.24
2     A   C0      N -0.33
3     A   C1      L -0.31
4     A   C1      N -2.30
5     A   C2      L -0.17
6     A   C2      N  0.14
7     A   C3      L -1.50
8     A   C3      N -1.01
9     A   C4      L -0.95
10    A   C4      N -0.49
11    B   C0      L -0.17
12    B   C0      N -0.41
13    B   C1      L  1.85
14    B   C1      N  0.39
15    C   C0      L  0.80
16    C   C0      N -1.57
17    C   C1      L -0.09
18    C   C1      N -0.36
19    C   C2      L -1.19
20    C   C2      N  0.36

对于每次访问( aval )的每个主题( factor ),需要的是因子( subj )“N”与“L”的值( vist )的比率。例如,第一个比率值将是 -1.375 ,来自 -0.33/0.24 。谢谢!

最佳答案

您可以使用 tidyr 包中的 spread 重塑数据,然后很容易计算出一个新列:

library(tidyr)
library(dplyr)
dat %>%
  spread(factor, aval) %>%
  mutate(ratio = N/L)


   subj vist     L     N      ratio
1     A   C0  0.24 -0.33 -1.3750000
2     A   C1 -0.31 -2.30  7.4193548
3     A   C2 -0.17  0.14 -0.8235294
4     A   C3 -1.50 -1.01  0.6733333
5     A   C4 -0.95 -0.49  0.5157895
6     B   C0 -0.17 -0.41  2.4117647
7     B   C1  1.85  0.39  0.2108108
8     C   C0  0.80 -1.57 -1.9625000
9     C   C1 -0.09 -0.36  4.0000000
10    C   C2 -1.19  0.36 -0.3025210

关于r - 使用 dplyr 计算每次访问的两个因素的比率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41508316/

10-12 22:38