一意の選択行と行番号から連想配列を作成しますこんにちは、みんな、
主題が科学または数学である行を選択したテーブルがあります(select where関数を使用)。 次に、特定の列の一意のエントリで選択されたすべての行番号を格納する連想配列を作成したいと思います。
その後、連想配列のすべてのキーに対してループを開始したいと思います。 これにより、値ごとに key[i] から Key[i+1] までの行がサブセット化されます。
例えば:
| 行番号 | 学生 | 順序 | 主題 |
| 1 | あ | 1 | 経済 |
| 2 | あ | 2 | 科学 |
| 3 | あ | 4 | 物理 |
| 4 | あ | 5 | 数学 |
| 5 | あ | 2 | 科学 |
| 6 | あ | 4 | 化学 |
| 7 | あ | 6 | 科学 |
| 8 | あ | 2 | 数学 |
| 9 | あ | 1 | 社交 |
※青色の行はselect where関数を使用して選択しています。
- 連想配列を格納する変数を作成したいです: ["Science" => {2,5,7}]、"Math" => {4,8}]。
- 次に、両方のキーに対してループを作成し、3 つのテーブルをサブセット化して生成したいと思います。
- 表 1: 行番号 2 から 5 まで
- 表 2: 行番号 5 から 7 まで
- 表 3 : 行番号 4 から 8 まで
解決方法を教えてください。
ありがとう :)
Re: 一意の選択行と行番号から連想配列を作成する必要と思われるサブセット テーブルを取得するには、Ian のコードの最後の部分を次のように変更します。 具体的には、(新しい) j インデックス付き for ループを Ian の i インデックス付き for ループ内にネストします。
乾杯、
ブレイディ
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
for(j = 1, j<=nitems(found_rows)-1, j++,
dt << subset(rows(found_Rows[j] :: found_Rows[j+1]));
)
);
show(subject_aa);
Re: 一意の選択行と行番号から連想配列を作成する@pmrozほとんどの作業が完了しました。以下に追加できる作業は次のとおりです。
NamesDefaultToHere(1);
dt = New Table( "Subjects",
Add Rows( 9 ),
New Column( "Student",
Character( 16 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} )
),
New Column( "Sequence",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] )
),
New Column( "Subject",
Character( 16 ),
"Nominal",
Set Values(
{"Economics", "Science", "Physics", "Math", "Science", "Chemistry", "Science", "Math", "Social"}
)
)
);
// Make any row selection (in this case, the 'blue' rows)
dt << selectRows({2, 4, 5, 7, 8 });
// Get key list from the current row selection
subjectVals = Column(dt, "Subject")[dt << getSelectedRows];
key_list = AssociativeArray(subjectVals) << getKeys;
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);
エディターで JSL キーワードを右クリックし、「ヘルプ スクリプト インデックス」を実行すると、詳細情報が表示されます。
あなたの例を使用すると、連想配列を取得した後、あなたが必要としている3つのテーブルの仕様は私には不明瞭でした。
Re: 一意の選択行と行番号から連想配列を作成する@pmrozご返信いただきありがとうございます。
私のデータセットは非常に大きいため、このアプローチを使用するとさらに時間がかかる可能性があります。
また、私のkey_listは固定されておらず、特定のテキストが含まれているかどうかは条件に基づいて異なります。Re: 一意の選択行と行番号から連想配列を作成するこのコードから始めましょう。
dt = New Table( "Subjects", Add Rows( 9 ),
New Column( "Student", Character( 16 ), "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} ) ),
New Column( "Sequence", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] ) ),
New Column( "Subject", Character( 16 ), "Nominal",
Set Values( {"Economics", "Science", "Physics", "Math", "Science", "Chemistry",
"Science", "Math", "Social"} ) )
);
key_list = {"Science", "Math"};
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);