我想根据后续行的比较对数据框中的列进行分类。
有:
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的一个合适的问题...我只是看不到如何解决相邻行的比较......
答案 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)