2016-08-30 5 views
1

のR表示することができますどのように計算された指標に基づいてデータフレームの列がマッチした基準からの指標に基づいて、私はデータフレームを関連する問題に取り組んで特定の行を取得しています

# Create dataframe 

position <- c("START" , "MIDDLE", "END" ,"START" , "MIDDLE", 
      "MIDDLE", "MIDDLE", "MIDDLE" ,"MIDDLE" ,"MIDDLE", 
      "MIDDLE", "MIDDLE", "MIDDLE" ,"END", "START" , 
      "START" , "START" , "MIDDLE", "MIDDLE", "END", 
      "START" , "START", "MIDDLE", "MIDDLE", "MIDDLE", 
      "END" ,"START", "MIDDLE", "MIDDLE", "MIDDLE", 
      "END", "START" , "MIDDLE", "MIDDLE", "MIDDLE", 
      "MIDDLE" ,"MIDDLE" ,"MIDDLE", "MIDDLE" ,"MIDDLE" , 
      "MIDDLE" ,"MIDDLE", "MIDDLE", "MIDDLE", "MIDDLE", 
      "MIDDLE" ,"MIDDLE", "MIDDLE" ,"MIDDLE" ,"MIDDLE" , 
      "MIDDLE", "MIDDLE", "MIDDLE", "END") 

text <-c("First line", "Middle Line", "Last Line", "First line","Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Middle Line", "Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Last Line", "First line", 
    "First line", "First line", "Middle Line", "Middle Line", "Last Line", 
    "First line", "First line", "Middle Line", "Middle Line", "Middle Line", 
    "Last Line", "First line", "Middle Line", "Middle Line", "Middle Line", 
    "Last Line", "First line", "Middle Line", "Middle Line", "Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Middle Line", "Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Middle Line", "Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Middle Line", "Middle Line", 
    "Middle Line", "Middle Line", "Middle Line", "Last Line") 

どの不可欠ショーライン:

> head(a_df) 
position  text 
1 START First line 
2 MIDDLE Middle Line 
3  END Last Line 

基本的に、各サブセットに開始/中間線と終了線が含まれるように、データフレーム全体のサブセットを表示したいと考えています。

いくつかのオンライン読ん行う、私は次のようにインデックスを生成しようとしています:私は、インデックスがアンバランスさを実現

index_start 
[1] 1 4 15 16 17 21 22 27 32 
> index_end 
[1] 3 14 20 26 31 54 

(私はこれらの不均衡を除く)午前しかし:

必要な出力を提供します
# Generate indices 
index_start <- with(a_df, grep("START", a_df$position)) 
index_end <- with(a_df, grep("END", a_df$position)) 

上記の出力を使用して、次のサブセットコマンドの値をシードする方法が不思議です。

a_df[c(1:3),] 
a_df[c(4:14),] 
a_df[c(17:20),] 
a_df[c(22:26),] 
a_df[c(27:31),] 
a_df[c(32:54),] 
それは順番に「index_start」の要素の選択については明らかではないが、コードに基づいて予め での

おかげでジョナサン

答えて

2

はOPのポストにあった私たちは "の最後の要素を取得する必要がありますように、それはそうです'index_end'の要素より小さいindex_start 'を返します。最後の要素を取得するために、我々はその後tail

で、「index_start」の最後の要素を取得し、findIntervaltapplyを使用してグループ化変数を作成し、我々は「、「index_start1」の対応する要素間の配列を取得しますindex_endをdata.frameにするために、Mapでそれに基づいてデータセット行をサブセット化します。

index_start1 <- unname(tapply(index_start, findInterval(index_start, index_end), 
          FUN = tail, 1))  
index_start1 
#[1] 1 4 17 22 27 32 

lst <- Map(function(x, y) a_df[x:y,], index_start1, index_end) 
lst 
#[[1]] 
# position  text 
#1 START First line 
#2 MIDDLE Middle Line 
#3  END Last Line 

#[[2]] 
# position  text 
#4  START First line 
#5 MIDDLE Middle Line 
#6 MIDDLE Middle Line 
#7 MIDDLE Middle Line 
#8 MIDDLE Middle Line 
#9 MIDDLE Middle Line 
#10 MIDDLE Middle Line 
#11 MIDDLE Middle Line 
#12 MIDDLE Middle Line 
#13 MIDDLE Middle Line 
#14  END Last Line 

#[[3]] 
# position  text 
#17 START First line 
#18 MIDDLE Middle Line 
#19 MIDDLE Middle Line 
#20  END Last Line 

#[[4]] 
# position  text 
#22 START First line 
#23 MIDDLE Middle Line 
#24 MIDDLE Middle Line 
#25 MIDDLE Middle Line 
#26  END Last Line 

#[[5]] 
# position  text 
#27 START First line 
#28 MIDDLE Middle Line 
#29 MIDDLE Middle Line 
#30 MIDDLE Middle Line 
#31  END Last Line 

#[[6]] 
# position  text 
#32 START First line 
#33 MIDDLE Middle Line 
#34 MIDDLE Middle Line 
#35 MIDDLE Middle Line 
#36 MIDDLE Middle Line 
#37 MIDDLE Middle Line 
#38 MIDDLE Middle Line 
#39 MIDDLE Middle Line 
#40 MIDDLE Middle Line 
#41 MIDDLE Middle Line 
#42 MIDDLE Middle Line 
#43 MIDDLE Middle Line 
#44 MIDDLE Middle Line 
#45 MIDDLE Middle Line 
#46 MIDDLE Middle Line 
#47 MIDDLE Middle Line 
#48 MIDDLE Middle Line 
#49 MIDDLE Middle Line 
#50 MIDDLE Middle Line 
#51 MIDDLE Middle Line 
#52 MIDDLE Middle Line 
#53 MIDDLE Middle Line 
#54  END Last Line 

注:これは、操作のほとんどがlist環境で行うことができるようlistに「data.frameのを維持することをお勧めします。

+1

迅速な応答akrunに感謝します。マップ関数は、今後これを使用する強力なコードを作成します。どうもありがとう。 –

関連する問題