R 计算重复测量期间分类变量的变化次数

R 计算重复测量期间分类变量的变化次数,r,R,我在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 <

我在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

subject我们可以在行上循环,获取非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

df$出于好奇,我试着用dplyr做这个。你知道能不能做到吗
df%%>%select(-subject)%%>%rowwise()%%>%mutate(x1=list(function(x)rle(x[!is.na(x)])$values))
甚至不能让我存储x1。@Haboryme你可以调用
df%%rowwise()%%>%do(
不知道
do
我会尝试的。谢谢。