행렬 값 바꾸기안녕! 모든 열 데이터를 8 x 12 행렬에 순서대로 입력하려고 합니다(아래쪽 방식으로 열을 먼저 채움). 내 열에는 값이 72개만 있으므로 채워지지 않은 나머지 값을 0으로 만들고 싶습니다.아래 코드를 작동시키는 데 많은 문제가 있습니다. 도움을 주시면 감사하겠습니다!
dt = Open("Example.jmp");<BR />Rows = nrows(dt);
names= dt << Get Column Names (String);
Table =[];
Table = J(8,12,0);
For(i=1, i <= ncol(dt),i++,
data = column(dt, names[i]) <<GETVALUES></GETVALUES>Re: 행렬 값 바꾸기감사합니다! 이것은 완벽하게 작동합니다Re: 행렬 값 바꾸기귀하의 예가 없으므로 JMP 샘플 데이터 테이블 중 하나를 사용해야 했습니다. 초기 데이터 테이블의 해당 행을 자신의 것으로 바꾸십시오.
Names Default to Here( 1 );
// use sample data to illustrate
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
// delete non-numeric data columns
dt << Delete Columns( { :Name, :Sex } );
// make empty container
table = Associative Array();
// get each data column and create (key, value) pair (key = col name, value = 8x12 matrix)
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
);
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Close( dt, No Save );
dir = Get Default Directory();
content = table << Get Contents;
For( t = 1, t <= N Items( content ), t++,
dt = As Table( content[t][2] );
file path = dir || content[t][1] || ".CSV";
dt << Save( file path );
Close( dt, No Save );
text = Load Text File( file path );
eol = Contains( text, "\!n" );
text = Munger( text, 1, eol - 1, content[t][1] );
Save Text File( file path, text );
);Re: 행렬 값 바꾸기도와 주셔서 정말 감사합니다. 감사합니다. 귀하의 코드를 사용하여 파일을 저장할 수 있었지만 현재 csv 파일의 첫 번째 행은 데이터의 첫 번째 줄이며 열 이름이 없습니다. 열 이름을 갖고 바로 아래에 8 x 12 데이터를 갖는 첫 번째 셀을 갖고 싶습니다.Re: 행렬 값 바꾸기기다려주십시오. 알 수 없는 이유로 CSV 파일을 저장하는 데 문제가 있습니다. 저는 기술 지원 부서에서 일하고 있습니다.
답변을 기다리는 동안 CSV 파일의 첫 번째 행(원본 데이터 열 헤더)을 원래 데이터 열 이름으로 바꾸고 싶은지 확인하고 싶습니다.
Re: 행렬 값 바꾸기이게 효과가 있었어!! 그러나 실제로는 csv 파일의 열 이름(또는 이 경우 content[t][1])을 첫 번째 줄로 유지하고 싶었습니다. 현재는 표시되지 않습니다. csv 파일의 첫 번째 셀에 어떻게 보관할 수 있는지 아시나요?Re: 행렬 값 바꾸기좋아, 이 업데이트된 스크립트 버전이 트릭을 수행해야 합니다.
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
);
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
content = table << Get Contents;
For( t = 1, t <= N Items( content ), t++,
dt = As Table( content[t][2] );
Close( dt, Save( content[t][1] || ".CSV" ) );
);
안타깝게도 CSV 파일에서 헤더 이름이 포함된 첫 번째 줄을 표시하지 않는 방법을 모르겠습니다. 아마도 다른 사람이 알고있을 것입니다. 즉시 파일을 텍스트로 다시 읽고, 첫 번째 줄을 삭제하고, 다시 저장할 수 있습니다.
Re: 행렬 값 바꾸기설정을 위한 레이아웃이 필요하며 csv 파일은 장치에서 읽는 유일한 파일 유형입니다.Re: 행렬 값 바꾸기도움말 > 스크립팅 색인을 참조하십시오. 드롭다운 버튼을 클릭하고 함수를 선택합니다. As Table() 함수를 검색합니다.
Re: 행렬 값 바꾸기JMP를 처음 사용하는 여러분의 사고방식은 여전히 스프레드시트 사용자의 사고방식일 수도 있습니다. CSV 파일의 대상이 어디인지는 모르겠지만 긴 테이블 레이아웃을 사용하면 JMP에서 많은 작업을 수행할 수 있습니다.
8x12 레이아웃이 필요한 이유는 무엇입니까? 행렬을 CSV 파일로 내보내야 하는 이유는 무엇입니까?
이 분석이 어디로 진행되고 있는지 알면 JMP를 활용하여 도움을 드릴 수 있습니다.
Re: 행렬 값 바꾸기좀 봐주세요 이 게시물 . 접시에 대한 실험 작업에 유용할 수 있습니다.
Re: 행렬 값 바꾸기약간 중복될 수도 있지만 csv 파일로 출력해야 한다는 요구 사항을 고려하여 이를 처리하는 대체 방법이 있습니다.데이터 테이블 조작을 사용하여 데이터를 올바른 형식으로 가져온 다음 데이터 테이블을 csv 파일에 씁니다.
Names Default To Here( 1 );
// Create some sample data
dt = New Table( "Example",
add rows( 72 ),
New Column( "c1", formula( Random Uniform( 1, 500 ) ) ),
New Column( "c2", formula( Random Uniform( 1, 500 ) ) ),
New Column( "c3", formula( Random Uniform( 1, 500 ) ) )
);
dt << run formulas;
dt:c1 << delete property( "formula" );
dt:c2 << delete property( "formula" );
dt:c3 << delete property( "formula" );
// Get the list of columns
colNamesList = dt << get column names( string, numeric );
// Loop across the columns and process them
For( i = 1, i <= N Cols( dt ), i++,
// Create a new table will only the single column
dtTemp = dt << subset(invisible, selected rows( 0 ), columns( Column( colNamesList[i] ) ) );
// If there are not 96 rows, add them
If( N Rows( dtTemp ) < 96,
rowCount = N Rows( dt );
dtTemp << add rows( 96 - rowCount );
For( k = rowCount + 1, K <= 96, k++,
Column( dtTemp, colNamesList[i] )[k] = 0
);
);
// Create a sequence column to allow for proper splitting of the data
dtTemp << New Column( "sequence",
formula(
x = Mod( Row(), 8 );
If( x == 0, x = 8 );
x;
)
);
dtTemp << run formulas;
// Split the data into 8 columns.....if this should be 12 just change the sequence formula above
dtSplit = dtTemp << Split(invisible, Split By( :sequence ), Split( Column( dtTemp, colNamesList[i] ) ), Sort by Column Property );
dtSplit << run formulas;
// Close the un needed temporary data table
Close( dtTemp, nosave );
// Change the output preferences to get rid of headers
current_pref = Char( Arg( Parse( (Char( Get Preferences( Export settings ) )) ), 1 ) );
// Set prefs (comma delimited, no headers)
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 0 ) ) );
// Save csv file
dtSplit << save( "$TEMP\" || colNamesList[i] || ".csv" );
//Restore oribinal prefs
Eval( Parse( "pref(" || current_pref || ")" ) );
// Close the un necessary table
Close( dtSplit, nosave );
);
Re: 행렬 값 바꾸기여러분의 도움과 관심에 감사드립니다. Mark Bailey의 연관 배열 방법이 효과가 있었습니다. 이제 연관 배열을 데이터 테이블에 넣어 CSV 파일로 내보낼 수 있는 방법을 알아내려고 합니다.Re: 행렬 값 바꾸기그렇다면 데이터를 행렬에 넣은 후 이를 영구 위치로 어떻게 이동합니까?Re: 행렬 값 바꾸기혼란을 드려 죄송합니다. 실험 결과를 플레이트의 위치와 연관시켜 저장하기 위해 각 컬럼 데이터를 8 x 12(96웰이 있는 미세 역가 플레이트의 크기) 형식으로 저장하려고 합니다. . 각 열은 서로 다른 실험을 나타냅니다.Re: 행렬 값 바꾸기나는 처음부터 이 논의를 따라왔습니다.실제 최종 목표가 무엇인지 노출하지 않고 스크립팅 연습으로 발전한 것 같습니다. @마크_베일리 연관 배열을 사용하여 훌륭한 솔루션을 제공했지만 제가 보기에 누락된 것은 이러한 매트릭스를 생성하는 실제 이유가 무엇입니까?그것이 알려지면 더 간단한 해결책이 있을 수 있습니다.
Re: 행렬 값 바꾸기열 이름은 연관 배열에 저장됩니다. 그것들이 열쇠입니다. 다음을 스크립트에 추가하여 이 주장을 확인할 수 있습니다.
Show( table << Get Keys );
도움말 > 도서 > 스크립팅 가이드를 확인한 다음 '연관 배열'을 검색해 보세요. 쌍을 반복하고 다른 많은 작업을 쉽게 수행할 수 있습니다. 가이드의 예시는 훌륭하지만 궁금한 점이 있으면 여기로 돌아오세요.
Re: 행렬 값 바꾸기감사합니다!! 이것은 잘 작동합니다. 단, 컬럼 이름은 저장되지 않습니다. 내가 어떻게 고칠 수 있는지 아세요?Re: 행렬 값 바꾸기마이크로 역가 플레이트의 결과에 대한 데이터 열이 있습니까?
각 열의 데이터를 8x12 테이블로 재구성하려고 합니다. 스크립트는 마지막 열의 테이블만 유지합니다. 다음은 모든 데이터 열을 처리하고 테이블 결과를 열 이름과 함께 연관 배열에 저장하는 스크립트입니다.
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
data[Loc(Is Missing( data ))] = 0;
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Show( table << Get Contents );
최소한 96개의 행이 있다고 가정합니다. 그 이상이 있으면 손실됩니다. 더 적은 경우 0 할당을 0으로 채워지는 연결로 변경해야 합니다. 이 버전은 대신 다음을 추가합니다.
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
)
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Show( table << Get Contents );
Re: 행렬 값 바꾸기도와주셔서 감사합니다! Get As Matrix 함수를 사용하여 데이터를 사양이 있는 행렬에 넣을 수 있습니까? 8x12 행렬로 들어가려면 열의 데이터가 필요합니다.Re: 행렬 값 바꾸기답변 주셔서 감사합니다 짐! 현재 데이터 테이블에는 5개의 열이 있지만 사용자 입력에 따라 변경될 수 있습니다. 기본적으로 12열과 8행이 있는 행렬에 데이터 열을 넣으려고 합니다.
(a - 1) * b + b는 나에게 적합하지 않은 것 같습니다. 첫 번째 열 데이터의 경우 항상 data[0]이기 때문인 것 같습니다. 무엇이 잘못되고 있는지 알고 있나요?Re: 행렬 값 바꾸기Jim은 매우 좋은 솔루션을 제공하지만 귀하가 무엇을 원하는지 확신할 수 없으므로 다른 점을 설명하기 위한 다른 방법을 제안합니다.
Names Default to Here( 1 );
// open example
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// make illustrative example with colums of different sizes (missing values)
dt2 = dt1 << Split(
Split By( :age ),
Split( :weight ),
Remaining Columns( Drop All ),
Sort by Column Property
);
Close( dt1, No Save );
// input data table as matrix
mat = dt2 << Get As Matrix;
// replace missing values with zero
mat[Loc(Is Missing(mat))] = 0;
// see result
Show( mat );
도움이 되길 바랍니다.
Re: 행렬 값 바꾸기나는 당신이하려는 일을 정말로 이해하고 있는지 잘 모르겠습니다.그러나 아래에는 데이터라는 행렬의 값이 모두 소진된 후 0을 채우는 스크립트가 있습니다.
dt = Open( "Example.jmp" );
Rows = N Rows( dt );
names = dt << Get Column Names( String );
Table = [];
Table = J( 8, 12, 0 );
For( i = 1, i <= N Col( dt ), i++,
data = Column( dt, names[i] ) << getValues;
For( a = 1, a <= 12, a++,
For( b = 1, b <= 8, b++,
// I believe that (a - 1 ) * b + b will be equal to the
// row number of the data matrix you read in. Once it's
// value is greater than the number of rows in the dt data
// table, it will enter zeros.
If( (a - 1) * b + b <= Rows,
Table[a, b] = data[(a - 1) * b + b],
Table[a, b] = 0
)
)
);
);
Print( Table );
열에서 열로 이동하면서 외부 For() 루프를 사용하여 수행하는 작업이 혼란스럽습니다.데이터 테이블 예에는 몇 개의 열이 있습니까?