r - dplyr:比较依赖于另一个变量的变量中的值
问题描述
如何将依赖于另一个变量的变量中的值与 dplyr 进行比较?
df 基于来自调查的选择数据(长格式)。它有一个变量表示参与者id,另一个表示选择实例,还有一个表示选择了哪个备选方案。在我的数据中,我感觉很多人倾向于对这项任务感到厌倦,因此在每种情况下都坚持使用一种替代方案。因此,我想找出从某个实例开始到最后总是选择相同选项的人。
这是一个例子df:
set.seed(0)
df <- tibble(
id = rep(1:5,each=12),
inst = rep(1:12,5),
alt = sample(1:3, size =60, replace=T),
)
如下所示:
id inst alt
1 1 1 3
2 1 2 1
3 1 3 2
4 1 4 2
5 1 5 3
6 1 6 1
7 1 7 3
8 1 8 3
9 1 9 2
10 1 10 2
11 1 11 1 <-
12 1 12 1 <-
13 2 1 1
14 2 2 3
...
我想创建两个新变量count和count_alt。新变量count应指示基于id和inst相同值出现在alt中的频率,仅计算id末尾的值。因此,对于参与者 (id==1),计数变量应为 2,因为在最后两个实例(11 和 12)中选择了替代 1。count_alt将取值 1(始终与 inst == 12 相同)
新的 df 应该如下所示
id inst alt count count_alt
1 1 1 3 2 1
2 1 2 1 2 1
3 1 3 2 2 1
4 1 4 2 2 1
5 1 5 3 2 1
6 1 6 1 2 1
7 1 7 3 2 1
8 1 8 3 2 1
9 1 9 2 2 1
10 1 10 2 2 1
11 1 11 1 2 1
12 1 12 1 2 1
...
我宁愿用 dplyr 而不是循环来解决这个问题,因为我想将它配合到进一步的数据整理步骤中。
解决方案
看看能不能解决:
library(dplyr)
df %>%
group_by(id) %>%
mutate(
count = cumsum(alt != lag(alt, default = "rndm")),
count = sum(count == max(count)),
count_alt = alt[n()]
)
输出:
id inst alt count count_alt
1 1 1 3 2 1
2 1 2 1 2 1
3 1 3 2 2 1
4 1 4 2 2 1
5 1 5 3 2 1
6 1 6 1 2 1
7 1 7 3 2 1
8 1 8 3 2 1
9 1 9 2 2 1
10 1 10 2 2 1
11 1 11 1 2 1
12 1 12 1 2 1
13 2 1 1 1 2
14 2 2 3 1 2
15 2 3 2 1 2
16 2 4 3 1 2
17 2 5 2 1 2
18 2 6 3 1 2
19 2 7 3 1 2
20 2 8 2 1 2
21 2 9 3 1 2
22 2 10 3 1 2
23 2 11 1 1 2
24 2 12 2 1 2
25 3 1 1 1 3
26 3 2 1 1 3
27 3 3 2 1 3
28 3 4 1 1 3
29 3 5 2 1 3
30 3 6 3 1 3
31 3 7 2 1 3
32 3 8 2 1 3
33 3 9 2 1 3
34 3 10 2 1 3
35 3 11 1 1 3
36 3 12 3 1 3
37 4 1 3 1 1
38 4 2 3 1 1
39 4 3 1 1 1
40 4 4 3 1 1
41 4 5 2 1 1
42 4 6 3 1 1
43 4 7 2 1 1
44 4 8 3 1 1
45 4 9 2 1 1
46 4 10 2 1 1
47 4 11 3 1 1
48 4 12 1 1 1
49 5 1 2 2 2
50 5 2 3 2 2
51 5 3 3 2 2
52 5 4 2 2 2
53 5 5 3 2 2
54 5 6 2 2 2
55 5 7 1 2 2
56 5 8 1 2 2
57 5 9 1 2 2
58 5 10 1 2 2
59 5 11 2 2 2
60 5 12 2 2 2
推荐阅读
- sql - 使用 SELECT IIF 会导致另一个 SELECT IIF
- parallel-processing - 在 Julia 中使用 FLoops 进行并行化
- python - AssertionError: 收听前必须输入音源
- r - 值 [[3L]](cond) 中的错误:没有名为“plyr”的包
- html - HTML/CSS 将元素移动到其他地方
- gatsby - 如何为 netlify-cms-widget-mdx 提供范围和自定义组件
- java - 使用通配符泛型时的 Java 编译错误
- python - 机制 - 为什么使用相对导入直接在 main 上运行会导致“尝试在没有已知父包的情况下进行相对导入”
- sql - 多列不匹配查询 MS Access SQL
- http - 如何在 Go 中的 HTTP POST 请求正文中发送变量(在代码中声明)?