열의 이전 및 다음 누락되지 않은 값저는 JMP를 처음 접했는데 정말 어려움을 겪고 있는 문제를 발견했습니다. 저는 JMP Pro 17을 사용합니다. 시작점으로부터의 거리("거리")가 포함된 열 하나와 해당 거리의 신호 강도 값("신호")이 포함된 열 하나가 포함된 데이터 시트가 있습니다. 해당 거리의 신호 값이 주어진 범위(Signal[row] == max(Signal[row-n, row) 내에서 가장 큰 값인 경우 1을 생성하는 수식 열을 만들어 신호 로컬 최대값(피크)을 찾았습니다. +n]), 그렇지 않으면 누락되었습니다. 그러나 내 문제는 다음과 같습니다. 각 피크에서 가장 가까운 피크까지의 거리를 제공하는 또 다른 수식 열을 만들고 싶습니다.
즉, "Peak?" == 1, “Peak?”이 있는 이전 행과 다음 행에서 거리 값을 찾습니다. == 1, 현재 행의 거리와 해당 행의 거리 간의 차이의 절대값을 찾고 두 값 중 최소값을 구합니다.
지금까지 행에 로컬 신호 최대값이 포함된 경우 해당 값의 거리를 제공하는 "도우미 열"을 만들었습니다. 즉, 피크 신호 값의 거리 값이 있는 열이 있고 피크가 아닌 모든 행의 누락된 값이 있습니다. 그러나 "이전 비결측값"이나 "다음 비결측값"을 공식으로 정의하는 방법을 찾을 수 없습니다. 이에 대한 공식을 만드는 방법이나 피크 사이의 최소 거리를 찾는 실제 문제를 해결하는 더 나은 방법에 대한 조언을 주시면 매우 감사하겠습니다.
기본 데이터 분석 및 모델링데이터 탐색 및 시각화Re: 열의 이전 및 다음 누락되지 않은 값내 마음에 떠오른 첫 번째 아이디어는 상당히 복잡해 보입니다.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("Peaks", Numeric, "Continuous",
Set Values([., 1, ., ., 2.5, ., ., ., ., 3.1, ., ., 2])
)
);
dt << New Column("DistanceToPeak", Numeric, Continuous, Formula(
As Constant(m = :Peaks << get values;
peak_rows = Loc(m);
peak_values = m[peak_rows];
);
If(!IsMissing(:Peaks),
peak_distances = peak_rows - Row();
previous_peak = Loc(peak_distances < 0);
If(N Items(previous_peak) == 0,
previous_distance = .;
,
previous_distance = Abs(m[Row()] - peak_values[Reverse(previous_peak)[1]]);
);
next_peak = Loc(peak_distances > 0);
If(N Items(next_peak) == 0,
next_distance = .;
,
next_distance = Abs(m[Row()] - peak_values[next_peak[1]]);
);
Min(previous_distance, next_distance);
,
.
);
));

Re: 열의 이전 및 다음 누락되지 않은 값매우 감사합니다!! 그것은 아름답게 작동합니다. 나는 최선을 다해 귀하의 공식을 이해하려고 노력할 것입니다.
가능하다면, 여러분이나 여기 이 글을 읽고 있는 다른 누구에게나 좀 더 관련 있는 추가 질문을 하고 싶습니다.
다음으로 두 채널의 피크 사이의 최소 거리를 찾고 있습니다. 즉, 거리, 신호 1 및 신호 2가 있고 각각의 피크를 찾았으며 jthi의 환상적인 도움 덕분에 이제 신호 1과 신호 2의 최소 피크 간 거리를 찾을 수 있습니다. 공식이 있습니까? 신호 1의 최고점에서 신호 2의 가장 가까운 최고점까지의 거리를 찾는 데 사용할 수 있습니까? 즉, 위의 jthi 답변에 첨부된 이미지를 사용하는 경우 "Peaks2" 열을 추가하고 "Peaks"가 누락되지 않은 경우 수식을 사용하여 "Peaks"와 "Peaks" 사이의 차이 절대값의 최소값을 구합니다. "Peaks2"의 이전 및 다음 누락되지 않은 값은 무엇입니까?
Re: 열의 이전 및 다음 누락되지 않은 값비슷한 아이디어가 여전히 작동할 것입니다.
더보기...
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("Peak1", Numeric, "Continuous",
Set Values([., 1, ., ., 2.5, ., ., ., ., 3.1, ., ., 2])
),
New Column("Peak2", Numeric, "Continuous",
Set Values([0.5, 0.9, ., 2, ., 4, ., ., ., ., ., 5, .])
)
);
dt << New Column("Peak1ToPeak1", Numeric, Continuous, Formula(
As Constant(m = :Peak1 << get values;
peak_rows = Loc(m);
peak_values = m[peak_rows];
);
If(!IsMissing(:Peak1),
peak_distances = peak_rows - Row();
previous_peak = Loc(peak_distances < 0);
If(N Items(previous_peak) == 0,
previous_distance = .;
,
previous_distance = Abs(m[Row()] - peak_values[Reverse(previous_peak)[1]]);
);
next_peak = Loc(peak_distances > 0);
If(N Items(next_peak) == 0,
next_distance = .;
,
next_distance = Abs(m[Row()] - peak_values[next_peak[1]]);
);
Min(previous_distance, next_distance);
,
.
);
));
dt << New Column("Peak1ToPeak2", Numeric, Continuous, Formula(
As Constant(m = :Peak2 << get values;
peak_rows = Loc(m);
peak_values = m[peak_rows];
);
If(!IsMissing(:Peak1),
peak_distances = peak_rows - Row();
previous_peak = Loc(peak_distances < 0);
If(N Items(previous_peak) == 0,
previous_distance = .;
,
previous_distance = Abs(:Peak1[Row()] - peak_values[Reverse(previous_peak)[1]]);
);
next_peak = Loc(peak_distances > 0);
If(N Items(next_peak) == 0,
next_distance = .;
,
next_distance = Abs(:Peak1[Row()] - peak_values[next_peak[1]]);
);
Min(previous_distance, next_distance);
,
.
);
));

이 데이터를 어떻게 사용할지 + 프로그래밍이 얼마나 편한지에 따라 코드를 더 쉽게 이해할 수 있도록 몇 가지 함수를 만드는 것을 고려할 수 있습니다(예: "이전 행 찾기", "다음 행 찾기", "가장 가까운 찾기"). 열",...).
Re: 열의 이전 및 다음 누락되지 않은 값다시 한 번 정말 감사드립니다! 마찬가지로 아름답게 작동합니다. 그리고 나는 당신의 코드를 이해하기 시작했습니다.
조언 해주셔서 감사합니다. 앞서 언급했듯이 저는 JMP는 물론이고 일반적인 프로그래밍에도 전혀 익숙하지 않습니다. 그러나 나는 특히 더 많은 경험을 쌓으면서 그것을 명심할 것입니다. 다시 한 번 감사드립니다. 최선을 다하시길 바랍니다!