ddply和分类功能

时间:2012-02-04 19:37:28

标签: r plyr

我想根据后续行的比较对数据框中的列进行分类。

有:

DF <- data.frame(respondent=rep(letters[1:2], each=5), response=c(1,1,2,2,1,3,1,1,1,1))
   respondent response
1           a        1
2           a        1
3           a        2
4           a        2
5           a        1
6           b        3
7           b        1
8           b        1
9           b        1
10          b        1

我想添加一个新列(例如:check),如果row1中的响应= row2中的响应,则变为1,如果它们不相同则变为0。这应该针对每个受访者单独进行。

这会给我

   respondent response check
1           a        1  1
2           a        1  0
3           a        2  1
4           a        2  0
5           a        1  
6           b        3  0
7           b        1  1
8           b        1  1
9           b        1  1
10          b        1

我想我可以通过一个foor循环来解决这个问题,但它似乎是ddply的一个合适的问题...我只是看不到如何解决相邻行的比较......

1 个答案:

答案 0 :(得分:3)

这是plyr的一个很好的候选者,因为它分割数据并应用函数然后返回数据。在这种情况下,您需要考虑整个response向量和一个相似的向量移位。

我过去解决这个问题的方法是:

shift.func <- function(df) {
  lag<-c(df$response[-1],0)
  df$check <- ifelse(df$response==lag,1,0)

  return(df)
}

ddply(DF,.(respondent),shift.func)