Ich habe einen Datensatz mit ID
und als Bezeichner. Ich mag die Zeilen trennen, dass wir nicht den Vorjahresrekord, dh, ich will B
von A
finden:So finden Sie Datensätze basierend auf einer logischen Regel in R
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
ich, dass mit den folgenden if loop
bekommen kann, aber ich bin sicher, dass es ein besserer Weg, es zu tun! Im folgenden Code sortiere ich zuerst A
durch ID
und Year
, um den ersten Dateneintrag für jede ID
zu erkennen.
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,])
}
}
Daten (Danke @ chinsoon12)
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))
'A [ave (A $ Year, A $ ID, FUN = function (x) c (0, diff (x)))! = 1,]' – rawr