2016-10-01 3 views
2

列の1つのデータフレームの値の半分を選択します。私の下に与えられたデータフレームから言い換えれば、列Yの行の半分の与えられた値を抽出する必要があります。1つの列で指定されたデータフレームの半分を選択します。

DF: 
id1 column Y value 
9830  A   6 
7609  A   0 
9925  B   0 
9922  B   5 
9916  B   6 
9917  B   8 
9914  C   2 
9914  C   7 
9914  C   7 
9914  C   2 
9914  C   9 

新しいデータフレームは次のようになります。また

NEW DF: 
    id1 column Y value 
    9830  A   6 
    9925  B   0 
    9922  B   5 
    9914  C   2 
    9914  C   7 

、それが参考になりますすべての行のランダムな半分を選択するための解を知るには、DF与えられた列Y(例えば最初の50%を選択しない)。

何か助けていただければ幸いです。 ありがとう!

答えて

4

あなたは私たちが切り捨て行の奇数のために、我々はdplyrからfilterを使用することができますcolumn Yに同じ値を持つ行の各グループの最初の半分をしたいと仮定:

library(dplyr) 
df %>% group_by(`column Y`) %>% filter(row_number() <= floor(n()/2)) 
##Source: local data frame [5 x 3] 
##Groups: column Y [3] 
## 
## id1 column Y laclen 
## <int> <fctr> <int> 
##1 9830  A  6 
##2 9925  B  0 
##3 9922  B  5 
##4 9914  C  2 
##5 9914  C  7 

我々最初group_bycolumn Y(列名に空白が含まれているため、後ろの引用符に注意してください)、がグループn()で与えられた行の合計数以下である行のみを保持するには、2を使用します(そしてfloor )。保つために一致するように維持し、%in%するために行番号を生成するためにsampleを使用し、各グループ内の行のランダムな50%を選択するには


set.seed(123) 
result <- df %>% group_by(`column Y`) %>% filter(row_number() %in% sample(seq_len(n()),floor(n()/2))) 
##Source: local data frame [5 x 3] 
##Groups: column Y [3] 
## 
## id1 column Y laclen 
## <int> <fctr> <int> 
##1 9830  A  6 
##2 9922  B  5 
##3 9917  B  8 
##4 9914  C  2 
##5 9914  C  9 
+0

すごい、ありがとう!そして最初の50%だけでなく、50%のランダムな行を選択する方法も知っていますか? – Makaroni

+1

@Makaroni:私の編集をご覧ください。 – aichao

関連する問題