행렬에서 모드 찾기여보세요!
여러 행렬에서 가장 공통적 인 가치를 찾으려면 스크립트 작성에 도움이 필요합니다. 데이터 테이블에 수백 개의 행이 있습니다. 각 행은 시퀀스 열 (예 : ABCDABCD)을 가지고 있으며 해당 시퀀스 내에서 특정 문자의 위치를 표시하는 열을 만들었습니다 (예 : A의 위치는 [1,5,0,0] 임).
(필자는 글쓰기에 상당히 익숙하기 때문에 글자가 들어있는 위치가 더 이상 없을 때는 매트릭스에 0이 표시됩니다. 문자열 내에 여러 위치를 찾는 확실하고 효율적인 방법이 있으면 알려 주시기 바랍니다. 그렇지 않으면 0을 모드 중 하나로 제외 할 수 있습니까?)
이제 모든 행에서 호출 된 모든 위치를보고 가장 일반적인 위치를 찾고 싶습니다.
내가 가진 것 :
행 행렬 열
1 [2, 3, 6, 8, 0, 0]
2 [2, 4, 5, 10, 0, 0]
3 [2, 7, 9, 10, 0, 0]
내가 원하는 것 :
가장 많이 발생하는 순서대로 모드를 보여주는 목록
위치 2 - 3 번
위치 10 - 2 번 발생
나는 현재 위치 수식을 포함하고있는 스크립트를 첨부했다.
고맙습니다!
다시 : 매트릭스의 열에서 모드 찾기고맙습니다!!다시 : 매트릭스의 열에서 모드 찾기dt << where (문자 : = ""A : & Row Num == 1) | : 문자 == "C"& : 행 Num == 2);
그게 당신에게 당신의 첫 번째 요구 사항을주지 않습니까?
그리고 두 번째 요구 사항은 Tabulate를 사용하여 계산할 수 있어야합니다. 원하는 내용을 올바르게 이해하고 있어야합니다.
다시 : 매트릭스의 열에서 모드 찾기행마다 다른 글자의 위치를 찾고 행을 비교할 수 있어야합니다. 예를 들어, 행 1의 시퀀스에서 모든 "A"의 위치를 찾고 행 2의 시퀀스에서 "C"의 모든 위치를 찾아야합니다. 그런 다음 테이블에서 가장 자주 발생하는 위치를 볼 수 있어야합니다.
스크립트에서 당신은 저에게 주셨습니다 (그런데 고맙습니다!) 나는이 테이블 전체를 비교할 수 없다.
다시 : 매트릭스의 열에서 모드 찾기다음은 다른 방법을 사용하여 분석을 수행 할 수있는 새 열로 구문 분석 된 모든 문자 값을 가져 오는 지점까지 이동하는 스크립트입니다
dt=current data table();
// Create a new table with just the Sequence column in it
dtbuild = dt << subset(columns("Sequence"), selected rows(0));
// Find the longest sequence
Maxstring = col max(length(:sequence));
// Add a new column called Row Num that will let you keep track of what row
// each letter came from
dtBuild << New column("Row Num", formula(row()));
// Convert the data into real values
dtBuild:Row Num << delete property("formula");
// Create a new column for each possible position in the sequence number, and
// strip off the ith character and place it into the column
For(i=1,i<=Maxstring,i++,
dtBuild << new column("C" || char(i),character, formula(substr(:sequence,eval(i),1)));
column(dtBuild,i) << delete property("formula");
);
// Create a list of the columns in the dtBuild data table
TheColumns = dtBuild << get column names();
// We are only going to stack the columns created that have bits of the
// sequence in them, so get rid of the names of the first 2 column in the data table
TheColumns = remove(TheColumns,1,2);
// Stack all of the columns in to a data table that can be worked with
dtFinal = dtBuild << Stack(
columns( TheColumns),
Source Label Column( "Position" ),
Stacked Data Column( "Letter" ),
Name( "Non-stacked columns" )(Keep( :Row Num ))
);
// Get rid of the interium table
close(dtBuild, nosave);
// Delete rows that have no letter value
dtFinal << select where(:Letter == "");
dtFinal << delete rows;