타임스탬프를 사용하여 중복 행 제거안녕하십니까,
TimeStamp,Tool 열을 사용하여 데이터 세트 내에서 중복 행을 제거하려는 샘플 데이터 테이블이 첨부되어 있습니다.
복제 기준:
동일한 도구에서 6분 이내의 타임스탬프는 중복으로 간주되어 해당 행을 제거해야 합니다.
누군가 JSL에서 이것이 달성되는 방법을 도울 수 있습니까?
감사 해요!
@txnelson
해석학데이터 테이블스크립팅창Re: Timestamp를 사용하여 중복 행 제거이것이 문제를 진행하는 방법에 대한 예를 제공할 것이라고 생각합니다.
Names Default To Here( 1 );
dt = Current Data Table();
// Loop through the data table deleting all duplicate rows
i = 1;
While( i <= N Rows( dt ),
// Find the upper and lower bounds to match on
lower = :timeStamp[i] - In Minutes( 6 );
upper = :timeStamp[i] + In Minutes( 6 );
// Find the rows that match
theRows = dt << get rows where( :timeStamp > lower & :timeStamp < upper );
// Remove the current row from the list. We do not want to delete it
Try( theRows[1] = [] );
// Delete the remaining rows
Try( dt << delete rows( theRows ) );
// Increment the row to work on
i++;
);
Re: Timestamp를 사용하여 중복 행 제거안녕하세요 @psundar6 ,
@txnelson 아주 좋은 솔루션을 제공합니다.
테이블 정렬 및 열 수식을 사용하는 다른 접근 방식은 대화식으로 또는 다음과 같이 스크립팅하여 수행할 수 있습니다.
dt = current data table();
dt << Sort(
By( :TimeStamp, :Tool ),
Replace Table,
Order( Ascending, Ascending )
);
dt << New Column( "to delete",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Formula( If( :Tool == Lag( :Tool, 1 ) & Date Difference( Lag( :TimeStamp, 1 ), :TimeStamp, "Minute" ) > 6, 1, 0 ), eval formula )
);
dt:to delete << suppress eval(true);
dt<< delete rows (dt<< get rows where (:to delete == 1));
그것이 당신을 위해 작동하는지 알려주십시오.
Re: Timestamp를 사용하여 중복 행 제거안녕하세요 론,
귀하의 솔루션을 시도했지만 결과에 문제가 있습니다.
귀하의 코드를 실행한 결과를 첨부했습니다. 어떤 이유로 몇 개의 중복 항목을 잡지 못하는 것 같습니다.
감사 해요.
Re: Timestamp를 사용하여 중복 행 제거이것은 작동합니다, 감사합니다!