設定
「列」の1つがリストであるリストマトリックスがあります(操作するのは奇妙なデータセットだと思いますが、他の操作に役立つと思います)。リストの各エントリは次のいずれかです。(1) 空 (integer(0))、(2) 整数、または (3) 整数のベクトル。
たとえば、R オブジェクト "df" では、df$ID がインデックス ベクトルで、df$Basket_List がリストです。
ID <- c(1,2,3,4,5,6,7,8,9)
Basket_List <- list(integer(0),c(123,987),c(123,123),456,
c(456,123),456,c(123,987),c(987,123),987)
d.f <- data.frame(ID)
d.f$Basket_List <- Basket_List
私の質問
問題1
「Basket_List」に特定の値が含まれているかどうかに基づいて、初期のサブセットである新しいデータセットを作成したいと思います。たとえば、Bask_list が「123」または「123」と「987」を持つような df のすべての行のサブセット、またはその他のより複雑な条件。
次のすべてのバリエーションを試しましたが、役に立ちませんでした。
d.f2 <- subset(d.f, 123 %in% Basket_List)
d.f2 <- subset(d.f, 123 == any(Basket_List))
d.f2 <- d.f[which(123 %in% d.f$Basket_List,]
# should return the subset, with rows 2,3,5,7 & 8
問題2
私のもう 1 つの問題は、この操作を何百万行 (トランザクション データ) に対して実行することになるため、速度を向上させるために可能な限り最適化したいと考えています (現在、複雑な for ループがありますが、時間がかかりすぎる)。
データの代替設定
役に立つと思われる場合は、データを次のように設定することもできます。
ID <- c(1,2,2,3,3,4,5,5,6,7,7,8,8,9)
Basket <- c(NA,123,987,123,123,456,456,123,456,123,987,987,123,987)
alt.d.f <- data.frame(ID,Basket)