クロス検証のために、データフレームをリストに格納されたローリングチャンクに分割しようとしています。Rデータフレームを分割すると行名が保持されない
ここにありますが、私のコードです:
split_data <- function(data, window.size) {
windows.count = NROW(data) - window.size
res = vector(mode="character", windows.count)
print(head(data)) # (1)
for(d in 0:windows.count) {
res[d+1] <- data[(1+d):(window.size + d),,drop=FALSE]
print(head(res[[d+1]])) # (2)
}
return(res)
}
私がログアウトしたものを見てみると(1)私ははっきりと行名は自分のデータである見ることができます。スライスを実行してres[d+1]
(2)に格納すると、関連するデータフレームに行名がなくなったことを示します。
行の名前は、相互検証に非常に重要です。とにかくここで使うことはできますか?答えは常にスライシング操作にdrop=FALSE
を追加するように思われますが、ここでは機能しません。
ありがとうございました!
EDIT:
でこれをしようとするデータセットを再作成するには:
label <- c("test1", "test2", "test3", "test4", "test5", "test6")
dat <- c(1, 2, 3, 4, 5, 6)
dats <- data.frame(dat)
rownames(dats) <- label
実行機能split_data(dats, 2)
は、所望の出力は、データフレームのリストです:
dats
test1 1
test2 2
dats
test2 2
test3 3
dats
test3 3
test4 4
dats
test4 4
test5 5
dats
test5 5
test6 6
私は実際のリストの出力を入れても、それを生成することはできません。これは、リストの各要素のリスト内に何が含まれるべきかを十分に示すものでなければなりません。
開始データセットと出力を指定してください。 – Abdou
@Abdou私が出力とサンプルデータセットとして望むものの最良の指標を与えました。さらに、列名ではなく行名を意味するように編集しました。 – rec
また、 'lapply(1 :(nrow(dats)-wind + 1)、function(x)dats [x:(x + wind-1),, drop = FALSE])'割り当ておよびループコード。 – thelatemail