2016-10-06 12 views
2

2〜5年の間に多数の被験者を観察し、毎年特定の症状(「はい」または「いいえ」)があるかどうかを尋ねました。観察期間(1年目から5年目)の間に、この症状状態/変数が何回変化したか、すなわちシフト数(「いいえ」から「はい」へ、または「はい」から「いいえ」へ)それぞれの主題。残念ながら、私は被験者が答えなかったsom NAsを持っています。これらのNAsは無視すべきである。繰り返し測定中のカテゴリ変数の変化数をカウントする

subject<-c("a","b","c","d") 
year1 <- c("no", "yes", NA, NA) 
year2 <- c("yes", "yes", NA, "yes") 
year3 <- c("no", "yes", "yes", NA) 
year4 <- c("yes", "yes", NA, "no") 
year5 <- c("yes", "yes", "yes", NA) 
df = data.frame(subject, year1, year2, year3, year4, year5) 
df 

新しい数値変数「df $シフト」[シフト数(n)]を作成するにはどうすればよいですか? この例では、 "df $ shiftts"は3,0,0,1になります。

答えて

1

非NA要素のrleを取得し、 '値'を抽出し、隣接しない要素のsumを取得して新しい列 'シフト'に割り当てることができます。

df$shifts <- apply(df[-1], 1, function(x) {x1 <- rle(x[!is.na(x)])$values 
          sum(x1[-1]!= x1[-length(x1)])}) 
#[1] 3 0 0 1 
+0

私はdplyrでそれをやろうとしました。それができるかどうか知っていますか? '$ df%>%select(-subject)%>%rowwise()%>%mutate(x1 = list(function(x)rle(x [!is.na(x)])) x1を保存することさえできます。 – Haboryme

+0

@Haborymeあなたは 'df%>%rowwise()%>%do(' – akrun

+1

'do'を知りませんでした。 – Haboryme

関連する問題