数千万行の深いマトリックス/データフレーム (列: id、変数、値) でパターンの頻度を見つけようとしています。これは、以下に示すように、広いマトリックスで簡単に実行できます。最初にワイドフォーマットに変換せずに(深いマトリックスで)同じことを行う方法があるかどうか疑問に思っていました。ありがとう。
require(dplyr)
require(tidyr)
set.seed(100)
ncol <- 10
nrow <- 100000
#create sample matrix in wide format
df1 <- as.data.frame(matrix((runif(nrow*ncol)>0.8) + 0, ncol=ncol))
cols <- colnames(df1)
df1 <- filter(df1, rowSums(df1)>0)
df1 <- cbind(id=seq_len(nrow(df1)), df1)
#compute frequency of patterns
out1 <- df1 %>%
group_by_(.dots=cols) %>% summarise(freq=n()) %>% as.data.frame() %>% arrange(desc(freq))
#convert to deep format
df2 <- df1 %>%
gather(variable, value, -id) %>% filter(value>0)
#compute frequency of patterns
out2 <- df2 %>% spread(variable, value, fill=0) %>%
group_by_(.dots=cols) %>% summarise(freq=n()) %>% as.data.frame() %>% arrange(desc(freq))
identical(out1, out2)