열의 이전 및 다음 누락되지 않은 값저는 JMP를 처음 사용하는 초보자이고, 정말 어려움을 겪고 있는 문제에 부딪혔습니다.저는 JMP Pro 17을 사용합니다.시작점으로부터의 거리가 있는 열 하나("Distance")와 해당 거리에서의 신호 강도 값이 있는 열 하나가 있는 데이터 시트가 있습니다("Signal").신호 값이 주어진 범위 내에서 가장 큰 값이면 1을 생성하는 공식 열을 만들어 신호 국소 최댓값(피크)을 찾았습니다(Signal[row] == max(Signal[row-n, row+n]), 그렇지 않으면 누락).하지만 제 문제는 다음과 같습니다.각 피크에서 가장 가까운 피크까지의 거리를 제공하는 또 다른 공식 열을 만들고 싶습니다.
즉, "Peak?" == 1인 경우 "Peak?" == 1인 이전 행과 다음 행의 거리 값을 찾고, 현재 행의 거리와 해당 행들의 거리 차이의 절대값을 찾고, 두 값 중 최소값을 구하고 싶습니다.
지금까지 저는 행에 로컬 신호 최대값이 포함되어 있으면 해당 값에서의 거리를 제공하는 "도우미 열"을 만들었습니다. 다시 말해, 피크 신호 값에서의 거리 값과 피크가 아닌 모든 행의 누락된 값이 있는 열이 있습니다. 그러나 "이전 누락되지 않은 값" 또는 "다음 누락되지 않은 값"을 수식으로 정의하는 방법을 찾을 수 없습니다. 이에 대한 수식을 만드는 방법이나 피크 사이의 최소 거리를 찾는 실제 문제를 해결하는 더 나은 방법이 있는지에 대한 조언을 주시면 매우 감사하겠습니다.
기본 데이터 분석 및 모델링데이터 탐색 및 시각화Re: 열의 이전 및 다음 누락되지 않은 값정말 감사합니다, 다시 한번! 똑같이 아름답게 작동합니다. 그리고 저는 당신의 코드를 이해하기 시작했습니다.
조언 감사합니다. 말씀드렸듯이 저는 JMP와 프로그래밍 전반에 대해 꽤 초보입니다. 하지만 특히 더 많은 경험을 쌓으면서 꼭 기억하겠습니다. 다시 한번 감사드립니다. 여러분 모두에게 최선을 기원합니다!
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: 열의 이전 및 다음 누락되지 않은 값정말 고맙습니다!! 정말 잘 작동합니다. 저는 최선을 다해 귀하의 공식을 살펴보고 이해하려고 노력할 것입니다.
괜찮으시다면, 여기를 읽고 계신 분들이나 다른 분들께 추가로 관련된 질문을 하나 드리고 싶습니다.
다음으로, 두 채널의 피크 사이의 최소 거리를 찾고 있습니다. 즉, 거리, 신호 1, 신호 2가 있고, 각각의 피크를 찾았고, jthi의 환상적인 도움 덕분에 이제 신호 1과 신호 2의 최소 피크 간 거리를 찾을 수 있습니다. 신호 1의 피크에서 신호 2의 가장 가까운 피크까지의 거리를 찾는 데 사용할 수 있는 공식이 있습니까? 즉, 위의 jthi의 답변에 첨부된 이미지를 사용하고 "Peaks2" 열을 추가하고 "Peaks"가 누락되지 않은 경우 "Peaks"와 "Peaks2"의 이전 및 다음 누락되지 않은 값의 차이의 절대값 중 최소값을 찾는 공식을 사용합니까?
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);
,
.
);
));
