該解決方案將無論工作御史列的順序:
df[df$censor!=1 | ave(df$censor,df$censor,FUN=function(x) 1:length(x))==1,];
它的工作原理導出每個不同審查值的「運行計數」。我以相當不尋常的方式使用了ave()
函數來爲每個唯一傳感器值評估表達式1:length(x)
一次,並且ave()
函數執行必要的工作以將每個得到的「計數向量」映射回傳感器值在分組向量(即第二個參數爲ave()
)。 ave()
的第一個參數的內容(但不是長度)完全不相關,因爲表達式1:length(x)
僅取決於組的長度,而不取決於其內容。 (但爲第一個參數重用分組向量是有意義的,因爲它保證具有正確的長度,即與分組向量長度相同。)因此,返回值ave()
表示每個傳感器值的運行計數,根據他們在審查專欄中發生的順序妥善訂購。運行計數然後可用於索引操作以僅選擇先發生的行,即具有運行計數值1的行(至少對於檢查值1; |
的LHS在所有其他傳感器值中選擇而不管發生數)。
這裏的一個示範,其中我已經與檢查員柱弄亂略微證明階不可知論:
df <- data.frame(State=c('Arizona','Arizona','Arizona','Arizona','Arizona','Arizona','Arizona','Arizona'), Year=c(1970,1971,1972,1973,1974,1975,1976,1977), APPT=c(3,3,3,3,1,1,1,1), mood=c(47.778,51.948,48.429,42.909,40.548,39.517,38.659,36.995), ranney_4yrs=c(0.3299708,0.3265375,0.3246062,0.3226750,0.3683167,0.4139583,0.4543917,0.4948250), folded_ranney_4yrs=c(0.8299708,0.8265375,0.8246062,0.8226750,0.8683167,0.9139583,0.9543917,0.9948250), time=c(30,31,32,33,34,35,36,37), censor=c(1,0,1,0,0,1,0,1));
df;
## State Year APPT mood ranney_4yrs folded_ranney_4yrs time censor
## 1 Arizona 1970 3 47.778 0.3299708 0.8299708 30 1
## 2 Arizona 1971 3 51.948 0.3265375 0.8265375 31 0
## 3 Arizona 1972 3 48.429 0.3246062 0.8246062 32 1
## 4 Arizona 1973 3 42.909 0.3226750 0.8226750 33 0
## 5 Arizona 1974 1 40.548 0.3683167 0.8683167 34 0
## 6 Arizona 1975 1 39.517 0.4139583 0.9139583 35 1
## 7 Arizona 1976 1 38.659 0.4543917 0.9543917 36 0
## 8 Arizona 1977 1 36.995 0.4948250 0.9948250 37 1
df[df$censor!=1 | ave(df$censor,df$censor,FUN=function(x) 1:length(x))==1,];
## State Year APPT mood ranney_4yrs folded_ranney_4yrs time censor
## 1 Arizona 1970 3 47.778 0.3299708 0.8299708 30 1
## 2 Arizona 1971 3 51.948 0.3265375 0.8265375 31 0
## 4 Arizona 1973 3 42.909 0.3226750 0.8226750 33 0
## 5 Arizona 1974 1 40.548 0.3683167 0.8683167 34 0
## 7 Arizona 1976 1 38.659 0.4543917 0.9543917 36 0
'DAT [cumsum(DAT $檢查員)<= 1,]'也許假設'DAT '將永遠被訂購,因爲你有 – rawr 2015-03-30 22:02:02
'df [seq(1,match(1,df $ censor)),]''也是。 – thelatemail 2015-03-30 22:38:42