我正在尝试探索特定问题的响应变化模式。下面是一个数据集的例子。
id <- c(1,1,1, 2,2,2, 3,3,3,3, 4,4)
item.id <- c(1,1,1, 1,1,1 ,1,1,2,2, 1,1)
sequence <- c(1,2,3, 1,2,3, 1,2,1,2, 1,2)
score <- c(0,0,0, 0,0,1, 0,1,0,0, 1,0)
data <- data.frame("id"=id, "item.id"=item.id, "sequence"=sequence, "score"=score)
data
id item.id sequence score
1 1 1 1 0
2 1 1 2 0
3 1 1 3 0
4 2 1 1 0
5 2 1 2 0
6 2 1 3 1
7 3 1 1 0
8 3 1 2 1
9 3 2 1 0
10 3 2 2 0
11 4 1 1 1
12 4 1 2 0
id
代表人,item.id
代表问题。sequence
用于尝试更改响应,而score
是项目的分数。
我试图观察的是score
由0 to 1
和1 to 0
改变的子集。所需输出为:
data.0.to.1
id item.id sequence score
2 1 1 0
2 1 2 0
2 1 3 1
3 1 1 0
3 1 2 1
data.1.to.0
id item.id sequence score
4 1 1 1
4 1 2 0
有什么想法吗?谢谢
这里有一个选项,采用按"id"、"item.id"分组的"score"的diff
差异
library(dplyr)
data %>%
group_by(id, item.id) %>%
filter(any(score != 0)) %>%
mutate(ind = c(0, diff(score))) %>%
group_by(ind = ind[ind!=0][1]) %>%
group_split(ind, keep = FALSE)
#[[1]]
# A tibble: 2 x 4
# id item.id sequence score
# <dbl> <dbl> <dbl> <dbl>
#1 4 1 1 1
#2 4 1 2 0
#[[2]]
# A tibble: 5 x 4
# id item.id sequence score
# <dbl> <dbl> <dbl> <dbl>
#1 2 1 1 0
#2 2 1 2 0
#3 2 1 3 1
#4 3 1 1 0
#5 3 1 2 1
我会这样做:
library(dplyr)
data.0.to.1 = data %>%
group_by(id, item.id) %>%
filter(any(diff(score) > 0))
data.1.to.0 = data %>%
group_by(id, item.id) %>%
filter(any(diff(score) < 0))