您好我有一个数据框'dat2'
:
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 :(得分: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