如何根据R中的逻辑规则查找记录

时间:2016-04-04 02:16:08

标签: r filtering data-cleaning

我的数据集包含def add(request): // Do something return render(request, 'register/index.html', {}) ID作为标识符。我想将我们没有上一年记录的行分开,即我希望从Year找到B

A

我可以通过以下A = ID Year x y 1 2010 1 2 1 2011 2 2 1 2014 4 1 2 2013 2 3 2 2014 1 2 B = ID Year x y 1 2010 1 2 1 2014 4 1 2 2013 2 3 获得,但我确信有更好的方法可以做到这一点!在以下代码中,我首先按if loopAID进行排序,以检测每个Year的第一个数据条目。

ID

数据(感谢@ chinsoon12)

B <- A_sort[1,]
for(i in 2:nrow(A_sort)){
    if(A_sort$ID[i] != A_sort$ID[i-1]){
        B <- rbind(B,A_sort[i,])
    }else if(A_sort$Year[i] != A_sort$Year[i-1]+1){
        B <- rbind(B,A_sort[i,])
    }
}

1 个答案:

答案 0 :(得分:0)

使用diff来计算行之间滞后的年份?然后选择没有上一年记录的那些

A <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L), Year = c(2010L, 2011L, 
    2014L, 2013L, 2014L), x = c(1L, 2L, 4L, 2L, 1L), y = c(2L, 2L, 
    1L, 3L, 2L)), .Names = c("ID", "Year", "x", "y"), class = "data.frame", row.names = c(NA, 
    -5L))

library(plyr)
ddply(A[order(A$ID, A$Year),], .(ID), function(x) {
    yearLag <- c(0,diff(x$Year))
    x[yearLag != 1, ]
})