私は約100万レコードと80カラムの大きなデータセットを持っています。処理を高速化するために、私はdata.tableを使用しています。今data.tableのインクリメントを伴う条件付きの作成
set.seed(1200)
N_Blocks = 1348
cyc=200
City1 <- vector()
City2 <- vector()
a1 <- vector()
a2 <- vector()
for (a in 1:cyc) {
City1 <- sample(paste("City", formatC(a, width=nchar(cyc), flag="0"), sep=""),N_Blocks,rep=T)
a1 <- sample(0:1,N_Blocks,rep = T)
City2 <- append(City2,City1)
a2 <- append(a2,a1)
}
df1 <- data.frame(City2,a2)
要件がためのことである:以下のサンプルデータのためのコードである私は、条件に基づいて新しい列を作成する必要があると私はdata.table
でこれを行う方法のよう失われています各都市(現在、このサンプルデータに200の都市があります)とa2 == 1の場合、12ヶ月で1秒の合計数を持つ新しい列を作成する必要があります。したがって、例えばCity001 & a2 == 1と1200のシードの場合、私は671のレコードを取得します。したがって、新しい列月はコード01-12を持つ必要があります。したがって、a2 == 1の場合は1番目の56レコードはコード01、次の56のレコードのコード02の場合、.....最後の55レコードのCity001のa2 == 1の場合はコード12 671に追加)。 12ヶ月で各都市のa2の選択を分割するようなもの。
我々は、コマンドから選択の市レベルの概要を取得することができます -
table(df1$City2,df1$a2)
我々は、この使用してdata.tableを達成することはできますか?
私が正しくOPの質問を理解していれば、私は、まだそれは正しいですか分かりません。行669を例に取ってみると: '669:City001 1 07'、それは07ではなく12と言うべきです。City001行の最後の12番目の行(a2 = 1)はすべて12とラベル付けされるべきです。 – Mako212
@ Mako212はい、それです正しい結果です。 'a2 == 0'の行は、OPの仕様に従って月の値を取得すべきではありません。 'df1 [1:669、sum(a2 == 0)]'を実行すると、 '326'が返されます。これは月の値を取得しない行の数です。 'a2 == 1'の行だけが月の値を取得するはずです。したがって、669 - 326 = 343行だけが月の値を取得する必要があります。つまり、行669の正しい結果は '07'です。 – Jaap
@Jaap、ありがとうございます!これは動作します! {....}の中で何が起こっているのかちょっと詳しく説明できれば、多くの助けになります。非常に興味深いコードであり、理解しようとしていますが、それを得ることはできません。私のために行く長い道のり...... – user1412