여러 열의 각 행의 최대값과 소스 열의 해당 이름안녕하세요. 각 행의 최대값과 해당 최대값에 해당하는 열 이름(또는 매개변수)을 쉽게 찾을 수 있는 방법이 있나요? 다음은 요청을 설명하는 간단한 예입니다.
| T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 | 최대_값 | Col_Name(매개변수) |
| 87.2 | 83.6 | 81.4 | 83 | 83 | 83 | 83 | 82.3 | 83.3 | 84.6 | 87.2 | T1 |
| 85.9 | 84 | 82 | 84 | 83.3 | 83.3 | 84 | 83 | 86.5 | 87.2 | 87.2 | T10 |
| 84.9 | 82.7 | 86 | 83 | 82.3 | 82.3 | 83 | 82 | 83.6 | 85.2 | 86 | T3 |
| 85.6 | 84.6 | 82.7 | 84.6 | 84.3 | 84.3 | 84.3 | 83.6 | 84.9 | 86.2 | 86.2 | T10 |
| 85.2 | 83.6 | 82 | 83.3 | 83 | 83 | 83.3 | 82.3 | 84.3 | 85.6 | 85.6 | T10 |
| 86.8 | 84.3 | 82.7 | 84.3 | 83.6 | 83.6 | 84.3 | 83.3 | 85.9 | 86.2 | 86.8 | T1 |
| 86.2 | 84 | 82.3 | 84 | 87 | 83.3 | 83.6 | 83 | 84.9 | 85.9 | 87 | T5 |
| 88.1 | 84.6 | 82.3 | 84.3 | 83.6 | 84 | 84.3 | 83.3 | 85.9 | 86.2 | 88.1 | T1 |
| 85.6 | 83.3 | 81.7 | 83.3 | 83 | 83 | 83.6 | 82.7 | 84 | 85.9 | 85.9 | T10 |
| 37.4 | 36.1 | 36.4 | 36.4 | 36.1 | 36.1 | 36.4 | 35.4 | 36.7 | 37.4 | 37.4 | T1 |
| 36.7 | 34.5 | 34.8 | 34.5 | 33.8 | 34.1 | 34.5 | 33.5 | 36.1 | 36.1 | 36.7 | T1 |
| 34.8 | 32.9 | 33.2 | 32.9 | 32.2 | 32.5 | 36 | 31.9 | 33.8 | 35.1 | 36 | T7 |
| 38 | 36.4 | 36.4 | 36.4 | 36.4 | 36.1 | 36.7 | 39 | 38 | 38.3 | 39 | T8 |
| 38 | 35.1 | 35.1 | 40 | 34.1 | 34.5 | 34.8 | 33.8 | 36.4 | 37 | 40 | T4 |
감사해요!
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름처음에 귀하의 질문을 잘못 읽었습니다. 따라서 이 답변에는 replacementInto를 사용하지 않는 단순화와 특정 값을 찾는 변형이 포함되어 있습니다.
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "first", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 9] ) ),
New Column( "second", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 6, 10] ) ),
New Column( "skip", character, setvalues( {"a", "b", "c"} ) ),
New Column( "third", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 7, 11] ) ),
New Column( "fourth", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12] ) )
);
names = dt << getcolumnnames( "numeric" ); // returns a list of all numeric column names
findval=7;
row = 2;
Row() = row; // names will pull data from the current row
rowpos = Loc( findval==matrix(evallist(names)) );
show(names[rowpos],names[rowpos[1]][row]);
names[rowpos] = {:third};
names[rowpos[1]][2] = 7;
Loc은 행렬에서 0이 아닌 항목의 위치를 반환합니다. 스칼라와 행렬이 포함된 == 연산자는 1과 0으로 구성된 행렬을 반환합니다. Loc 함수는 rowpos(1의 인덱스 포함)의 행렬을 반환합니다. [1]은 findval과 일치하는 첫 번째 위치를 사용합니다. names[rowpos[1]]은 열 이름이고 [row]는 열의 행에서 일치하는 답을 가져옵니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름고마워요 크레이지!
Concat() 대신 Substitute Into()와 함께 여러 열의 행에서 특정 값의 위치를 찾는 데 사용할 수 있는 다른 함수가 있습니까?
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "first", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 9] ) ),
New Column( "second", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 6, 10] ) ),
New Column( "skip", character, setvalues( {"a", "b", "c"} ) ),
New Column( "third", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 7, 11] ) ),
New Column( "fourth", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12] ) )
);
names = dt << getcolumnnames( "numeric" ); // returns a list of all numeric column names
Show( names ); // {first, second, third, fourth}
Substitute Into( names, Expr( {} ), Expr( Concat() ) );
Show( Name Expr( names ) ); // first || second || third || fourth
Row() = 2; // names will pull data from the current row
rowpos = Loc( names, 6 ); // works only with a list
감사해요,
라비
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름(IFMax를 찾아보세요...) 예, 열을 쉽게 나열할 수 있다면 설명하기가 훨씬 쉬울 것입니다. 아마도 더 빠를 수도 있습니다. 지적해주셔서 감사합니다!
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름새 열에서 IFMax 함수를 사용하는 데 문제가 있습니까?열의 개수가 많으면 불편하지만, 열이 20개 이하이면 IFMax 수식만 입력하면 되니 꽤 간단합니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름데이터 테이블 첨자는 JMP 13의 새로운 기능입니다.
평가할 때 현재 행에서 행 벡터 행렬을 생성하는 표현식을 작성하려면 이 아이디어와 같은 것을 시도해 볼 수 있습니다.
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "first", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 9] ) ),
New Column( "second", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 6, 10] ) ),
New Column( "skip", character, setvalues( {"a", "b", "c"} ) ),
New Column( "third", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 7, 11] ) ),
New Column( "fourth", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12] ) )
);
names = dt << getcolumnnames( "numeric" ); // returns a list of all numeric column names
Show( names ); // {first, second, third, fourth}
Substitute Into( names, Expr( {} ), Expr( Concat() ) );
Show( Name Expr( names ) ); // first || second || third || fourth
Row() = 2; // names will pull data from the current row
rowvec = (Eval( names )); // [5 6 7 8]
행 이름 목록이 주어지면 Substitute Into() 함수는 중괄호 목록 연산자를 concat 함수로 바꿉니다. Concat 함수는 || 연결 연산자이며 많은 인수를 사용할 수 있습니다. 연결은 현재 행에 대한 목록의 각 열 참조를 평가합니다. 개별 스칼라 값은 행 행렬로 연결됩니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름안녕하세요 크레이지,
JMP 10에서 샘플 스크립트를 실행할 때 'Loc Max' 액세스 또는 평가 시 인수는 행렬{1}이어야 합니다. 잘못된 인수...라는 오류 메시지가 나타납니다.
JMP10에서는 데이터 테이블 인덱싱이 허용되지 않습니까?
감사해요!
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름좋아, 뭔가 빠졌네요.....제 결과물이 첨부되어 있습니다. 결과를 확인해보니 MaxVal 열에는 해당 행 열 3~25에서 발견된 최대값이 포함되어 있고 MaxVal_Col은 최대값이 발견된 열의 이름입니다.
내가 무엇을 놓치고 있나요?
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름짐에게 다시 한 번 감사드립니다! 그러나 출력을 검토해 보면 결과가 올바르지 않다는 것을 알 수 있을 것입니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름알았어....제 오류입니다. 잘못된 결과가 나온 것이 아니라 코드를 실행할 수 없다고 생각했습니다. 문제는 "colnames" 열 목록이 Loc Max를 수행 중인 열 목록과 일치하지 않는다는 것입니다. 첫 번째와 두 번째 열 이름은 "colnames" 목록에서 제거되어야 합니다. 또한 이 문제는 다음 명령문을 사용하여 MaxVal을 가져오는 데 문제를 일으켰습니다.
MaxVal = dt[r, 위치];
전체 데이터 테이블을 살펴보고 반환되는 위치는 데이터 테이블보다 2개 적은 열이 있는 행렬을 기반으로 하기 때문입니다.
그래서 나는 문제를 극복하는 한 가지 방법을 보여주는 간단한 재작성을 수행했습니다.
dt = Open( "C:/data.jmp" );
colnames = dt << getcolumnnames;
For( i = 2, i >= 0, i--,
colnames = Remove( colnames, i, 1 )
);
For Each Row(
r = Row();
location = Loc Max( dt[r, 3 :: 25] ); // location of maximum value in array from Col #3 to #25
//MaxVal = dt[r, location];
MaxVal_Col = colnames[location] << getname;
MaxVal = as column(eval(MaxVal_Col));
);
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름고마워요 짐! 이것이 내가 얻은 것이며 출력이 올바르지 않습니다(예: 행 #1 및 #2).
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름고마워요 짐! 이것이 내가 얻은 것이며 출력이 올바르지 않습니다(예: 행 #1 및 #2).
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름캐싱으로 인해 의심되는 몇 가지 오류를 보았습니다. 이 문제를 해결하는 유일한 방법은 JMP 자체가 아닌 OS를 다시 시작하는 것입니다.
업데이트된 스크립트를 실행하고 OS를 다시 시작한 후 확인할 수 있습니까?
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름다음은 스크립트를 실행한 후의 데이터 테이블입니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름Jim님 답변 감사드립니다! 그러나 여전히 나에게는 작동하지 않습니다. dt=현재 데이터 테이블(). 무슨 일이 일어나고 있는지 잘 모르겠습니다. 그런데, 생성한 출력 파일을 나에게 보내주실 수 있나요?
감사해요!
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름스크립트와 데이터 테이블은 나에게 매우 효과적이었습니다.이제 나는
dt=Open("........");
에게
dt=current data table();
테이블은 이미 열려 있었기 때문에.
따라서 이를 시도해 보거나 dt=Open 문 뒤에 추가 문을 배치하는 것이 좋습니다.
wait(0);
For Each Row가 시작되기 전에 데이터 테이블이 완료되지 않았을 가능성이 있습니다.대기(0); For Each Row를 실행하기 전에 열기를 강제로 완료합니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름아직도 나에게는 제대로 작동하지 않습니다. 첨부된 스크립트와 데이터 파일을 모두 찾으십시오. 제가 여기서 뭘 잘못했는지 알려주실 수 있나요?
감사해요!
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름좋은 지적. 예제는 다음과 같이 일반화될 수 있습니다(의도적으로 보기 흉한 열 배열...) 귀하에게 가장 적합한 둘 중 하나를 선택하십시오. 두 번째 방법은 실수로 기둥을 재배열하는 일이 없도록 하는 장점이 있습니다. 첫 번째는 수백 개의 열에 적합할 수 있습니다.
dt = New Table( "Untitled",
New Column( "maxval", numeric ),
New Column( "a", Numeric, Set Values( [1, 33, 1] ) ),
New Column( "maxcol", Numeric ),
New Column( "b", Numeric, Set Values( [2, 2, 2] ) ),
New Column( "c", Numeric, Set Values( [333, 1, 0] ) ),
);
// either
vars = [2 4 5];
colnames = (dt << getcolumnnames)[vars];
// or
colnames={a,b,c}; // this might be best choice
For Each Row(
row = Row();
location = Loc Max( dt[ row, colnames] ); // location of maximum value in array
col = colnames[location]<<GETNAME></GETNAME>Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름위치 변수에 추가해야 하는 열의 오프셋이 누락되었습니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름여기서 한 가지 문제에 부딪혔습니다. 선택해야 하는 열이 데이터 세트 사이에 있으면 작동하지 않는 것 같습니다.
For Each Row(
r = Row();
// 1::3 means columns 1 through 3. {a,b,c} would also work.
location = Loc Max( dt[ r, 57 :: 113] ); // location of maximum value in array
maxval = dt[r, location];
maxcol = colnames[location] << getname;
);
57열부터 113열까지 선택해야 하는데 어떤 이유로 스크립트를 끄고 이 작업을 수행하면 잘못된 값이 표시됩니다.
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름// this example uses JMP 13 data table indexing
dt = New Table( "Untitled",
New Column( "a", Numeric, Set Values( [1, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 2, 2] ) ),
New Column( "c", Numeric, Set Values( [333, 1, 0] ) ),
New Column( "maxval", numeric ),
New Column( "maxcol", Numeric )
);
colnames = dt << getcolumnnames;
For Each Row(
r = Row();
// 1::3 means columns 1 through 3. {a,b,c} would also work.
location = Loc Max( dt[ r, 1 :: 3] ); // location of maximum value in array
maxval = dt[r, location];
maxcol = colnames[location] << getname;
);
Data table with maximum value from row and name of maximum column for rowData table with maximum value from row and name of maximum column for row행의 최대값과 행의 최대 열 이름이 포함된 데이터 테이블
데이터 테이블 구독에 대한 이전 게시물
Re: 여러 열에 걸쳐 각 행의 최대값과 소스 열의 해당 이름똑같은 솔루션을 찾고 있습니다.
각 행에 대해 최대값을 찾고 열 이름을 반환하여 결과 데이터에 대한 통계를 실행할 수 있습니다.
예를 들어 열 이름이 최대로 표시되는 횟수, 최대 값에 기여하는 열 수, STD DEV 등을 확인합니다.