私の問題は、メインセットxの行番号を内部的に保存するノードがたくさんあることです。
セット x のデータを 2 つの新しいノードに分割したいとしますが、もちろん、このデータは親ノードに既に存在する場合にのみ子ノードに入れることができます。
説明する
# obtain the right data from x, using your saved rowNumbers
parentData <- x[parentNode$rowNumbers, ]
# take out the rows that meet some condition based on a column value
filter <- parentData[, someColumnNumber] > someCondition
# now we obtain the actual rownames based on x
childNode$rowNumbers <- rownames(parentData[filter, ])
これを行うためのよりきれいな方法はありますか?上記のコードは機能しますが、私も見てきましwhich()
たが、問題は、行番号と余分な列の制約の両方を条件とする場合、x よりも少ない行で新しい data.frame を作成することです。この新しい data.frame で使用which()
すると、親ノードから使用したいインデックスではなく、1 から始まるインデックスが取得されます。
編集:
これが私が言いたいことのより明確な例です。
ダミーデータはこちら
x <- structure(list(class = c(0L, 0L, 1L, 1L, 0L), splittingHere = 28:32,
anotherColumn = c(5L, 6L, 8L, 10L, 4L)), .Names = c("class",
"splittingHere", "anotherColumn"), class = "data.frame", row.names = c(NA,
-5L))
ここで、行 1、2、および 4 が含まれている一部の列での以前の分割により、parentData が内部に保存されていると想像してください。
rowNumbers <- c(1,2,4)
parentData <- x[rowNumbers, ]
条件に応じて、子にいくつかの値を送信する必要があります。たとえば、> 30 とします。
filter <- parentData[ , 2 ] > 30
今私が欲しいのは、この条件を満たす行番号です。私が行った場合
which(filter)
このベクトルの 3 番目の要素が true であるため、3 が得られます。しかし、x の 3 番目ではありません!