2016-06-16 3 views
0

Я относительно новичок в R, и я работаю с данными о поведении животных, и я пытаюсь установить, сколько раз индивидуальное животное меняет свое поведение в заданный период времени (сеанс в этом случае).подсчитывает количество изменений значения в массиве

Мой манекен набор данных, как: -

session = c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2) 
activity = c("V","F","D","F","F","W","V","R","R","S","V","U","W","V","V","V","R","R","R","R") 
df = data.frame(session,activity) 

Я хотел бы подсчитать количество раз, что активность изменяется в каждой сессии. Например, в сеансе 1 это будет 8 раз, а в сеансе 2 - 5 раз. Я пробовал варианты следующего предложения в Интернете использовать rle(), но мне интересно, как я могу его кодировать, поскольку в большинстве случаев он будет суммировать различные модальности в заданном массиве.

+0

Добавить флаг "r" – user31264

ответ

0

Я узнал от друга, что я должен был подражать rle столбцу «activity» моего df, убедившись, что этот столбец является символом, а не вектором df$activity=as.character(df$activity) Затем я применил эту функцию только к строкам одного сеанса, например, строка сессии 1:

res<-rle(df[which(df$session==1),2])#rle() function applied to the activity column of df and to the rows of the session 1 
length(res$lengths)# will give you the number of changes within a session 

, но применить его к большому набору данных, я мог бы применить его в цикле:

df[,2]=as.character(df[,2])# to treat session as a character 
ls.session=unique(df$session) 
nb.session=length(ls.session) 
new.df=data.frame(ls.session,rep(0,nb.session))#create an empty data.frame where we can apply the loop 
names(new.df)=c("session","nb.change") 
for(i in 1:nb.session){ 
res.rle.sess.i=rle(df[which(df$session==ls.session[i]),2]) 
nb.chang.sess.i=length(res.rle.sess.i$lengths) 
new.df[i,2]=nb.chang.sess.i 
} 
new.df 
0
change.f = function(x) c(FALSE, x[-1] != x[-length(x)]) 
aggregate(change.f(df$activity)&!change.f(df$session), by=list(df$session), FUN=sum) 

Выход:

Group.1 x 
1  1 7 
2  2 4 
Смежные вопросы