親愛なるみんな、
ID、最終検査データ、および最終検査決定列を含むデータテーブルがあります。 アソシエーション分析で使用する 1 つの列 (積み上げ) を作成するために、最後の検査データ列と最後の検査決定を結合したいと考えています。 たとえば、データ構造の 1 つのクラスターは次のようになります。
ID 最終検査判定 最終検査データ
101 製品仕様の欠陥
101 CGMP の逸脱
101 21 CFR 211.113
101 VAI LIQ_US
「最終検査決定」(この場合は「VAI」)を「最終検査データ」列の下に移動し、同じID(この場合は101)を持つ新しい行を作成したいと思います。 したがって、積み上げデータを次のようにする必要があります。
ID 最終検査データ
101 製品仕様の欠陥
101 CGMP の逸脱
101 21 CFR 211.113
101 リク_US
101VAI
さらに、これらの ID の一部は繰り返されますが、1 つ以上の最終検査データでは異なる値になります。 たとえば、Lab DEFECT は同じ ID の別の問題である可能性があるため、これらの値のいずれかが前の値と異なる場合には、別の行のクラスターを作成します。
ID 最終検査判定 最終検査データ
101 実験室の欠陥
101 CGMP の逸脱
101 21 CFR 211.113
101 VAI LIQ_US
事前にご協力いただき、誠にありがとうございます。
最高、
カイス
正しく理解できたかどうかはわかりませんが、別の方法を次に示します。 それが望むものである場合は、それがどの程度うまくスケールするかを確認する必要もあります。
NamesDefaultToHere(1);
// Example table . . .
dt = New Table( "Inspection",
Add Rows( 10 ),
New Column( "ID",
Character,
"Nominal",
Set Values(
{"101", "101", "101", "101", "102", "102", "102", "101", "101", "101"}
)
),
New Column( "Last Inspection Decision",
Character,
"Nominal",
Set Values( {"", "", "", "VAI", "", "", "Code 1", "", "", "Code 2"} )
),
New Column( "Last Inspection Data",
Character,
"Nominal",
Set Values(
{"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113",
"LIQ_US", "PRODUCT SPECIFICATIONS DEFECT", "21 CFR 211.113", "LIQ_US",
"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113"}
)
)
);
// Copy the table
dt2 = Eval(dt << getScript);
dt2 << setName(dt << getName ||" Stacked");
// Get the values from the two columns of interest into lists
ids = Column(dt2, "ID") << getValues;
vals = Column(dt2, "Last Inspection Data") << getValues;
// Find out where we need to insert new values, get the required values, and insert them into the right positions
insertAfter = dt2 << getRowsWhere(!IsMissing(:Last Inspection Decision));
for(r=1, r<= NItems(insertAfter), r++,
InsertInto(ids, Column(dt2, "ID")[insertAfter[r]], insertAfter[r] + r);
InsertInto(vals, Column(dt2, "Last Inspection Decision")[insertAfter[r]], insertAfter[r] + r);
);
// Add rows to teh copy of the table, insert the column values, and delete the column we don't need
dt2 << addRows(NRows(insertAfter));
Column(dt2, "ID") << setValues(ids);
Column(dt2, "Last Inspection Data") << setValues(vals);
dt2 << deleteColumns(:Last Inspection Decision);
こんにちは、
行数が 100,000 を超えているため、機能しません。 データを 3 つの部分に分割し、各部分に約 35,000 行を入れようとしましたが、うまくいきません。 なにか提案を?
最高、
カイス
これは最も堅牢な解決策ではありませんが、試してみてください。
dt = current data table ();
for each row( if(!is missing (:Last Inspection Decision),
dt << add rows(1, row()),
is missing (:Last Inspection Data), :Last Inspection Data[row()] = :Last Inspection Decision[row()-1])
);