2017-07-18 5 views
0

データ:はグループに参照することにより、GROUP_BY後、最後または最初のグループを破棄直接

df <- data.frame(A=c(rep(letters[1],3),rep(letters[2],3),rep(letters[3],3)), 
       B=rnorm(9), 
       stringsAsFactors=F) 

このを行う方法があるかどうかはわからないが、私は方法がある場合は知っているしたいと思いますどのような直接所望の出力を得るためにgroup_by(A)後にグループを参照することにより、最後のグループを破棄する:

A   B 
1 a -0.4900863 
2 a 1.4106594 
3 a -0.2245738 
4 b -0.2124955 
5 b 0.6963785 
6 b 0.9151825 

を私に直接THE GRで働くSOLUTIONSに興味を持っています例えばOUPS LEVEL

、のようなもの:私はSOLUTIONS仕事にgroup_byを必要としない

df %>% filter(!(A == max(A))) 
df %>% filter(!(A %in% max(A))) 

または他の溶液次の種類に興味を持っていないAM

df %>% group_by(A) %>% head(.Groups,-1) 
or 
df %>% group_by(A) %>% Groups[1:2] 

+0

%1の%group_indices(%)%2%>%df [。、] ' – akrun

+0

%d_%>%フィルタ(! (A == max(A)))」と言っていますが、24時間以内にもっと良いものを受け取れない場合は、回答として投稿するようお願いします...ありがとうございます! – CPak

答えて

1

と私はあなたが私たちがグループの数が何であるか事前に知っていたと仮定することになっていなかったと仮定しました。 labels属性を使用してみてください:

all_but_last <- df %>% group_by(A) %>% attr("labels") %>% head(-1) 
    A 
1 a 
2 b 

...希望行に

> df %>% filter(A %in% all_but_last[[1]]) 
    A   B 
1 a -0.799026840 
2 a -0.712402478 
3 a 0.685320094 
4 b 0.971492883 
5 b -0.001479117 
6 b -0.817766296 

を抽出するために、 "grouped_df" の実際の内容を見てdputを使用するのに役立ちます:

dput(df %>% group_by(A)) 
structure(list(A = c("a", "a", "a", "b", "b", "b", "c", "c", 
"c"), B = c(-0.799026840397576, -0.712402478350695, 0.685320094252465, 
0.971492883452258, -0.00147911717469651, -0.817766295631676, 
-1.00112471676908, 1.88145909873596, -0.305560178617216)), .Names = c("A", 
"B"), row.names = c(NA, -9L), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"), vars = "A", drop = TRUE, indices = list(
    0:2, 3:5, 6:8), group_sizes = c(3L, 3L, 3L), biggest_group_size = 3L, 
labels = structure(list(
         A = c("a", "b", "c")), 
         row.names = c(NA, -3L), 
         class = "data.frame", 
         vars = "A", drop = TRUE, .Names = "A")) 

ラベルはdata.frameなので、結果にunlistをさらに適用してall_but_lastとし、nその値を"[["で抽出する必要があります。

+0

'dput'を見ると助けになります。ありがとう。私はまだ答えを受け入れる前にちょっと待っています。感謝します。 – CPak

+1

待つ必要はありません。後でいつでも変更できます。 –

+1

これは、プレゼントを手渡してすぐに持ち去るようなものです。 ;-) – CPak

1

多分このh ELPS

library(dplyr) 
df %>% 
    group_by(A) %>% 
    group_indices(.) %in% 1:2 %>% 
    df[.,] 

それともdata.table

library(data.table) 
setDT(df)[, grp := .GRP, A][grp %in% unique(grp)[1:2]][, grp := NULL][] 
関連する問題