2016-08-08 5 views
1

私はdata.frameから1秒ごとに測定値をグルーピング変数に従って取得したいと考えています。例えば、data.frame Inputに、各IDのために毎秒Sampleを取る:グループ化変数に従って、Rのデータフレームからn番目の行をすべて削除するにはどうすればよいですか?

head(Input, 10) 
      Sample X  ID 
    15918  1 -1.326285 EABE_D5 
    15919  2 -1.315783 EABE_D5 
    15920  3 -1.313245 EABE_D5 
    15921  4 -1.304670 EABE_D5 
    15922  5 -1.309060 EABE_D5 
    15923  1 -1.292412 EABE_D4 
    15924  2 -1.294728 EABE_D4 
    15925  3 -1.282006 EABE_D4 
    15926  4 -1.287245 EABE_D4 
    15927  5 -1.278444 EABE_D4 

Outputという名前の新しいdata.frameを作成します。

Output 
     Sample X  ID 
15919  2 -1.315783 EABE_D5 
15921  4 -1.304670 EABE_D5 
15924  2 -1.294728 EABE_D4 
15926  4 -1.287245 EABE_D4 

が、このことは可能ですか?ありがとうございました。

+0

ありがとうございましたが、これは等しく、すべての 'Sample'とdata.frameになりしかし、2番目のサンプルは、すべて私の予想通りの出力が必要です。 – user2716568

+1

'Input [Input $ Sample %% 2 == 0、]'とは何ですか?これは、偶数番号のサンプルだけを取ります。 – symbolrush

答えて

2

dplyrを使用できます。 'ID' によりグループ化した後、我々はからaveで効率

library(data.table) 
setDT(Input)[Input[, .I[seq(2, .N, by = 2)], by = ID]$V1] 

ためdata.tableを使用したりすることができますseq

library(dplyr) 
Input %>% 
    group_by(ID) %>% 
    slice(seq(2, n(), by =2)) 
# Sample   X  ID 
# <int>  <dbl> <chr> 
#1  2 -1.294728 EABE_D4 
#2  4 -1.287245 EABE_D4 
#3  2 -1.315783 EABE_D5 
#4  4 -1.304670 EABE_D5 

かによって返されたとしても、インデックスに基づいて行をslicebase R、 'ID'でグループ化し、モジュロ演算子%%をyを2として適用し、否定(!)、この論理ベクトルを使用して行をサブセット化します。

Input[with(Input, !ave(Sample, ID, FUN = function(x) x %%2)),] 
#  Sample   X  ID 
#15919  2 -1.315783 EABE_D5 
#15921  4 -1.304670 EABE_D5 
#15924  2 -1.294728 EABE_D4 
#15926  4 -1.287245 EABE_D4 
0

これは非効率的な場合があります。しかし、あなたはティンデータフレームIDをもとにして、データフレームとして返さリストを変換するdo.callを使用してそれらをINGの各グループ内のすべての第二行を選択し、最終的にrbindlapply

do.call(rbind, lapply(split(df, df$ID), function(x) x[seq(2, nrow(x), by=2),])) 


#    Sample X  ID 
#EABE_D4.15924  2 -1.294728 EABE_D4 
#EABE_D4.15926  4 -1.287245 EABE_D4 
#EABE_D5.15919  2 -1.315783 EABE_D5 
#EABE_D5.15921  4 -1.304670 EABE_D5 

splitを使用してもう一つの方法でこれを行うことができます。

あなたが行名をしたくない場合は、あなたが(たとえばa)は一つの変数にデータフレームを取ることができ、その後、

rownames(a) <- NULL 
関連する問題