r的响应变化分析

  • 本文关键字:变化 响应 r
  • 更新时间 :
  • 英文 :


我正在尝试探索特定问题的响应变化模式。下面是一个数据集的例子。

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是项目的分数。

我试图观察的是score0 to 11 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))

最新更新