興味のある要素の少なくとも1つを含むグループをすべて選択したいのですが、中間配列を作成することでこれを行うことができましたが、何かがより簡単で速くなる。私の実際のデータセットは1M行(および20列)を超えているため、中間配列を作成するのに十分なメモリがあるかどうかはわかりません。もっと重要なのは、私の元のファイルの以下のメソッドには多くの時間がかかります。少なくとも1つの一致条件を持つグループ化された行を選択
ここに私のコードとデータです:
a)のデータ
dput(Data_File)
structure(list(Group_ID = c(123, 123, 123, 123, 234, 345, 444,
444), Product_Name = c("ABCD", "EFGH", "XYZ1", "Z123", "ABCD",
"EFGH", "ABCD", "ABCD"), Qty = c(2, 3, 4, 5, 6, 7, 8, 9)), .Names = c("Group_ID",
"Product_Name", "Qty"), row.names = c(NA, 8L), class = "data.frame")
b)のコード:私は、少なくとも1 Product_Name = ABCD
#Find out transactions
Data_T <- Data_File %>%
group_by(Group_ID) %>%
dplyr::filter(Product_Name == "ABCD") %>%
select(Group_ID) %>%
distinct()
#Now filter them
Filtered_T <- Data_File %>%
group_by(Group_ID) %>%
dplyr::filter(Group_ID %in% Data_T$Group_ID)
C)の予想される出力を持っているGroup_ID
を選択したいですis
Group_ID Product_Name Qty
<dbl> <chr> <dbl>
123 ABCD 2
123 EFGH 3
123 XYZ1 4
123 Z123 5
234 ABCD 6
444 ABCD 8
444 ABCD 9
私はこれで3時間以上苦労しています。私はSO:Select rows with at least two conditions from all conditionsによって自動提案されたスレッドを見ましたが、私の質問は非常に異なります。
まずはお手数ですが、どうもありがとうございます。これはうまくいきますが、私がdata.tableを使ってこれを行うことができるかどうか知っていますか?私は初心者ですが、私はdata.tableが一般的にdplyrよりも速いことを読んでいます。そうですか?もしそうなら、私はあなたの助けに感謝します。私はメモリ効率とスピードも求めているので、これを頼んでいます。私の状況を理解してくれることを願っています – watchtower
@watchtower:これが動作するかどうかを確認してください: dt = data.table(Data_File); dt [、x1:= ifelse(any(% "ABCD"のProduct_Name%)、T、F)、by = c( "Group_ID")];サブセット(dt、dt $ x1)[、1:3、with = F] –
ありがとうJoel!これはうまくいく!完璧。 – watchtower