2017-05-03 5 views
1

私は調査回答のデータフレームを持っています。私はどのように多くの質問が同じ方法で連続して答えられたかを調べようとしています。変更されていない値のカウント数

#Data 
s <- structure(list(Student_ID = c("1234", "1234", "1234", "1234", 
"1234", "1234", "1234", "1234", "1234", "1234", "1234", "1234", 
"1234", "1234", "1234", "1234", "1234", "1234", "1234", "1234", 
"1234", "5678", "5678", "5678", "5678", "5678", "5678", "5678", 
"5678", "5678", "5678", "5678", "5678", "5678", "5678", "5678", 
"5678", "5678", "5678", "5678", "5678", "5678"), key = c("Q1.1", 
"Q1.2", "Q1.3", "Q1.4", "Q1.5", "Q1.6", "Q1.7", "Q1.8", "Q1.9", 
"Q2.1", "Q2.2", "Q2.3", "Q2.4", "Q2.5", "Q2.6", "Q2.7", "Q2.8", 
"Q2.9", "Q2.10", "Q2.11", "Q2.12", "Q1.1", "Q1.2", "Q1.3", "Q1.4", 
"Q1.5", "Q1.6", "Q1.7", "Q1.8", "Q1.9", "Q2.1", "Q2.2", "Q2.3", 
"Q2.4", "Q2.5", "Q2.6", "Q2.7", "Q2.8", "Q2.9", "Q2.10", "Q2.11", 
"Q2.12"), value = c(4, 5, 6, 4, 5, 7, 8, 4, 8, 4, 5, 7, 5, 6, 
8, 4, 3, 5, 4, 4, 4, 2, 2, 1, 1, 0, 1, 2, 1, 2, 1, 1, 2, 2, 1, 
2, 2, 4, 3, 1, 2, 1)), row.names = c(NA, -42L), .Names = c("Student_ID", 
"key", "value"), class = c("tbl_df", "tbl", "data.frame")) 

私はこれを試してみた:

s %>% group_by(Student_ID) %>% mutate(strip = ifelse(value != lag(value,1,default = -1),1,0)) %>% print(n = 100) 

正しく(0に)私はカウントを開始すべき場所を特定しています。私はこれを使用しようとしました:

s %>% group_by(Student_ID) %>% mutate(strip = ifelse(value != lag(value,1,default = -1),1,lag(strip)+1)) %>% print(n = 100) 

しかし、オブジェクト 'ストリップ'が見つからないというエラーを受け取ります。

ここで私が見てみたいものだ:

#Answer column 
s$answer <- c(rep(1,19),2,3,1,2,1,2,1,1,1,1,1,1,2,1,2,1,1,2,1,1,1,1,1) 
+0

'data.table'' setDT(s)[、answer:= seq_len(.N)、。(cumsum(value!= shift(value、fill = -1))、Student_ID)] [] ' – akrun

答えて

2

あなたはその後、各グループ内のインデックスを見つけることrow_number()を使用して、cumsumを使用して連続した筋にそれらをグループ化することによって、これを行うことができます。

s %>% 
    group_by(Student_ID) %>% 
    group_by(group = cumsum(value != lag(value, default = -1)), add = TRUE) %>% 
    mutate(answer = row_number()) %>% 
    ungroup() 
関連する問題