시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정합니다."시간"(숫자, 연속형, 12시간 단위의 시간:분:초 형식)과 "이름"(문자, 각 시점과 관련된 실험 목록) 열이 있는 데이터 테이블이 있습니다. 여기에 언급되지 않은 다른 열을 Y축으로, 시간을 x축으로 사용하여 그래프를 그리면, x축 축척이 x축 변수 간에 동일하게 유지되어 x 그룹 변수 간의 각 플롯이 이동하는 문제가 발생합니다(그림 1).

그림 1. 각 x-그룹화 변수는 "이름" 열 변수이며 "이름"은 오버레이로도 사용됩니다.
내 생각은 다음과 같은 스크립트를 작성하는 것입니다.
1. 새 열을 만듭니다.
2. "시간" 열을 초 단위의 시간으로 변환하는 수식으로 새 열을 코딩합니다. "0"에서 시작하여 지정된 간격(이 경우 2초)으로 계산하고 "이름" 열의 값이 변경되면 즉시 0으로 재설정합니다.
제가 주로 묻는 질문은 다음과 같습니다.
1. 이게 가능할까요?
2. 새로운 열을 만들지 않고도 이 작업을 더 쉽게 수행할 수 있는 방법이 있습니까?
현재 Windows 10에서는 JMP 17.2.0을 사용하고 있습니다.
감사해요!
데이터 탐색 및 시각화Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정이것이 원하는 기능을 하는지 확인해 보세요.
dt << New Column( "ElapsedTime", numeric, continuous, Formula( :LocalTime - Col Min( :Local Time, :Name ) ) );
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정답변 감사합니다!
안타깝게도 아래 그림에서 볼 수 있는 "경과 시간" 열이 반환됩니다.

다음 코드를 시도해 봤는데, 위 그림의 "Time (s)" 열도 생성되었습니다. '초기값을 0으로 설정' 함수는 실행하지만, 다른 변환은 실행하지 않는 것 같습니다.
Names Default To Here(1); // Ensure scope is local for column references
dt = Current Data Table(); // Reference to the active data table
// Add a new numeric column "Time (s)" with the specified formula
dt << New Column( "Time (s)",
Numeric, Continuous, Format( "Best", 12 ), // numeric format (optional)
Formula(
If(
Row() == 1,
// Case 1: First row of the table -> start at 0 seconds
0,
:Name("Name") != Lag( :Name("Name") ),
// Case 2: Identifier changed from the previous row -> new run, reset time to 0
0,
// Case 3: Otherwise (same run as previous row) -> accumulate time difference
Lag( :Name("Time (s)") ) + ( :LocalTime - Lag( :LocalTime ) )
)
)
);
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정:LocalTime 열에 예상치 못한 문제가 있을 수 있습니다. 제가 만든 표에 수식을 적용해 봤는데, 의도한 대로 작동했습니다. :LocalTime 열의 형식은 어떻게 되어 있나요?

Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정예제 데이터 테이블을 만들었습니다.

그리고 다음 JSL을 실행했습니다.
Names Default To Here(1); // Ensure scope is local for column references
dt = Current Data Table(); // Reference to the active data table
// Add a new numeric column "Time (s)" with the specified formula
dt << New Column( "Time (s)",
Numeric, Continuous, Format( "Best", 12 ), // numeric format (optional)
Formula(
If(
Row() == 1,
// Case 1: First row of the table -> start at 0 seconds
0,
:Name("Name") != Lag( :Name("Name") ),
// Case 2: Identifier changed from the previous row -> new run, reset time to 0
0,
// Case 3: Otherwise (same run as previous row) -> accumulate time difference
Lag( :Name("Time (s)") ) + ( :LocalTime - Lag( :LocalTime ) )
)
)
)
dt << New Column( "ElapsedTime", numeric, continuous, Formula( :LocalTime - Col Min( :Local Time, :Name ) ) );
An은 다음과 같은 출력을 얻었습니다.

Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정좋아요, 괜찮아요. 제가 올린 코드는 실제로 작동했어요! 열 이름 철자가 틀렸어요.:confounded_face:
그러면 남은 질문은 새로운 열을 만들지 않고도 이 작업을 더 쉽게 할 수 있는 방법이 있는가?
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정새로운 열이 필요합니다. 영구 열일 필요는 없습니다. 즉, 그래프가 있는 동안만 존재하는 열일 수 있습니다.
Graph Builder(
Transform Column(
"Time (s)",
Formula( :LocalTime - Col Min( :LocalTime, :Name ) )
),
Show Control Panel( 0 ),
Variables( X( :"Time (s)"n ), Y( :Y Column ), Group X( :Name ) ),
Elements( Smoother( X, Y, Legend( 8 ) ) )
);
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정그래프 빌더를 실행할 때 언제든지 변환(가상) 열을 사용할 수 있습니다. 이렇게 하면 데이터 테이블에 실제 열이 없어도 됩니다.
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정완벽하네요. @txnelson 님과 두 분 모두 훌륭한 해결책을 제시해 주셔서 감사합니다!
Re: 시간을 시간 간격으로 변환하고 x축 오프셋을 방지하기 위해 두 번째 열 값을 기준으로 재설정참고로, JMP의 표준은 측정 단위를 단위 열 속성에 지정하는 것입니다. 이 경우 실제 열 이름은 시간이지만, 기본적으로 단위 값은 괄호 안에 표시되어 표시되는 값이 시간(초)으로 변경된다는 점이 다릅니다.