我是 R 新手,我一直在使用 dplyr 包进行总结。我无法找到以下问题的解决方案。
我的小标题:8 x 3 如下:
df <- tibble(id = c(1, 1, 1, 1, 1, 2, 2, 2 ),
block = c(2, 2, 2, 3, 3, 2, 2, 3),
answer = "TRUE")
Run Code Online (Sandbox Code Playgroud)
ID | 堵塞 | 回答 |
---|---|---|
1 | 2 | 真的 |
1 | 2 | 真的 |
1 | 2 | 真的 |
1 | 3 | 真的 |
1 | 3 | 真的 |
2 | 2 | 真的 |
2 | 2 | 真的 |
2 | 3 | 真的 |
ID -> 参与者 ID
块 -> 最高正确块
我只想保留每个参与者的最高分块分数,但最高分块分数定义为每个分块条件中至少有两个正确(TRUE)的最高分。
在上面的示例中,参与者 1 的最高分块得分为 3,因为在分块 3 处至少有两个正确答案。参与者 2 的最高得分为 2。请参见下面的示例。
最终输出应该是这样的:
ID | 堵塞 | 回答 |
---|---|---|
1 | 3 | 真的 |
2 | 2 | 真的 |
有人知道我应该如何开始吗?或者有什么包可以解决这个问题?
我设法使用slice_tail
参数维护每个参与者的最后一行,但不知道如何从那里继续
filter
仅保留那些具有>= 2
TRUE
值的块,稍后为每个块id
保留具有值的行max
block
。
library(dplyr)
df %>%
group_by(id, block) %>%
filter(sum(as.logical(answer)) >= 2) %>%
group_by(id) %>%
slice(which.max(block)) %>%
ungroup
# id block answer
# <dbl> <dbl> <chr>
#1 1 3 TRUE
#2 2 2 TRUE
Run Code Online (Sandbox Code Playgroud)