2017-10-17 28 views
0

您好我有一個數據幀'dat2'行:查找data.frame模式,如果再次出現刪除-之間

CYC POS REP  CTIME DTIME1 DTIME2 CUCNTS SQP SQP. STIME CTIME_mins ID  
1 1 1 1 5:00.900 11.827 11.808 55069 0 0 0:00 5.01500 WSTD 
2 1 2 1 50:01.781 68.202 68.192 1199 0 0 0:00 50.02968 S1  
3 1 3 1 100:01.781 136.185 136.135  21 0 0 0:00 100.02968 B1  
4 1 4 1 100:01.781 136.179 136.134  19 0 0 0:00 100.02968 TSG41  
5 1 5 1 100:01.775 136.180 135.340  16 0 0 0:00 100.02958 TSG42  
6 1 6 1 100:00.781 136.133 136.073  23 0 0 0:00 100.01302 TSG43  
7 1 7 1 100:01.781 136.200 136.146  93 0 0 0:00 100.02968 TSG44  
8 1 8 1 100:01.781 136.186 135.358 161 0 0 0:00 100.02968 TSG45  
9 1 9 1 50:01.781 68.217 68.201 1273 0 0 0:00 50.02968 S2  
10 1 10 1 100:01.780 136.178 136.137  15 0 0 0:00 100.02967 B2  
11 1 21 1 0:25.899 0.596 0.593  1 0 0 0:00 0.43165 TSG46  
12 1 1 1 5:00.900 11.846 11.826 57932 0 0 0:00 5.01500 WSTD 
13 1 2 1 50:01.719 68.379 68.347 1091 0 0 0:00 50.02865 S1 

該數據幀有13行(可以是不同的長度,但無所謂)。我首先需要檢查前3列'CYC''POS''REP':模式是'CYC == 1 && POS == 1 && REP == 1'首先檢查表格中是否存在多次模式。如果沒有,那就什麼都不做如果是,則在第二次出現之前刪除所有行。在這種情況下,應該刪除行1到11,我想我可以這樣做:但是我似乎已經創造了一個循環將會永存

for (i in 1:nrow(dat2)){ 
    dat2 <- dat2[-i,] 
    repeat{ 
     if (dat2[i,"CYC"] == dat2[1,"CYC"] && 
      dat2[i,"POS"] == dat2[1,"POS"] && 
      dat2[i,"REP"] == dat2[1,"REP"]) 

     {break} 

    } 
     #dat2trial <- dat2[-c(1:i-1),] 
    } 

。僅僅強調一下,如果它沒有找到重複的陳述模式,那它就不應該做任何事情。

+0

該模式也顯示在第1行。在那種情況下做什麼?刪除模式發生前的所有行? –

+0

是,刪除模式最後一次出現之前的所有行。 – Johannes

回答

2

如果我正確理解您的問題,請嘗試以下操作。

inx <- with(dat2, which(CYC == 1 & POS == 1 & REP == 1)) 
inx <- inx[length(inx)] 
dat3 <- if(inx > 1) dat2[-seq_len(inx - 1), ] else dat2 
dat3 
# CYC POS REP  CTIME DTIME1 DTIME2 CUCNTS SQP SQP. STIME CTIME_mins ID 
#12 1 1 1 5:00.900 11.846 11.826 57932 0 0 0:00 5.01500 WSTD 
#13 1 2 1 50:01.719 68.379 68.347 1091 0 0 0:00 50.02865 S1 
+0

很棒@Rui。有了這個,我也解決了一個不同的問題。 – Johannes

相關問題