私は巨大なデータフレームを持っています。1 つの列は 1 から 2 の範囲の整数です。必要なのは、この列で特定の値の数を持つ連続した行を探し、これらの行をサブセット化し、後でグラフに処理する方法です。
必要な作業の少なくとも一部を実行する小さな例を添付しました。探しているサブセットを印刷できます。しかし、次の 2 つの疑問が残ります。
- Rには、完全なdata.frameに「for」ループを適用するよりスマートな方法があると思います。ヒントはありますか?
- 「印刷」コマンドが一時的なdata.frameを保存する場所に、どのコマンドを入力する必要がありますか? サブセットの長さが異なるため、リストが必要だと思います...
私はすでにaggregateまたはddplyを見てきましたが、解決策を思いつくことができませんでした.
どんな助けでも大歓迎です。
test<-c(rep(1,3),rep(2,5),rep(1,3),rep(2,3),rep(1,3),rep(2,8),rep(1,3))
letters<-c("a","b","c","d")
a1<-as.data.frame(cbind(test,letters))
BZ<-2 #The variable to look for
n_BZ=4 #The number of minimum appearences
k<-1 # A variable to be used as a list item index in which the subset will be stored
for (i in 2:nrow(a1)){
if (a1$test[i-1]!=BZ & a1$test[i]==BZ) # When "test" BECOMES "2"
{t_temp<-a1[i,]} #... start writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]==BZ) # When "test" REMAINS "2"
{t_temp<-rbind(t_temp,a1[i,])} #... continue writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]!=BZ) # When "test" ENDS BEING "2"
{if (nrow(t_temp)>n_BZ) #... check if the temporary array has more rows then demanded
{print(t_temp) #... print the array (desired: put the array to a list item k)
k<-k+1}} #... increase k
else # If array too small
{t_temp<-NULL} # reset
}