1

我有一个包含大约 15 列和超过 300 万行的大型数据集。

因为数据集太大了,我想用multidplyr它。

由于数据的原因,不可能将我的数据框分成 12 个部分。假设有列col1col2每列都有几个不同的值,但它们重复(在每一列中分别)。

如何制作 12 个(或n)类似大小的组,每个组都包含在 和 中具有相同值的col1col2

示例:假设 incol1 foo和 in 中的一个可能值col2bar。然后将它们分组,具有此值的所有行都将在一个组中。

所以这个问题是有道理的,总是有超过 12 种col1和的独特组合col2

如果这是 python,我会尝试用 for 和 while 循环做一些事情,但既然是这样R,可能还有另一种方法。

4

2 回答 2

0

尝试这个:

# As you provided no example data, I created some data repeating three times.
# I used dplyr within tidyverse. Then grouped by the columns and sliced 
# the data by chance for n=2. 
library(tidyverse)
df <- data.frame(a=rep(LETTERS,3), b=rep(letters,3))
# the data:
df %>%
   arrange(a,b) %>% 
   group_by(a,b) %>% 
   mutate(n=1:n())
# A tibble: 78 x 3
# Groups:   a, b [26]
        a      b     n
   <fctr> <fctr> <int>
 1      A      a     1
 2      A      a     2
 3      A      a     3
 4      B      b     1
 5      B      b     2
 6      B      b     3
 7      C      c     1
 8      C      c     2
 9      C      c     3
10      D      d     1
# ... with 68 more rows

在每组两行上随机切分数据。

set.seed(123)
df %>%
  arrange(a,b) %>% 
  group_by(a,b) %>% 
  mutate(n=1:n()) %>% 
  sample_n(2)
# A tibble: 52 x 3
# Groups:   a, b [26]
        a      b     n
   <fctr> <fctr> <int>
 1      A      a     1
 2      A      a     2
 3      B      b     2
 4      B      b     3
 5      C      c     3
 6      C      c     1
 7      D      d     2
 8      D      d     3
 9      E      e     2
10      E      e     1
# ... with 42 more rows
于 2017-09-18T13:36:28.403 回答
0
# Create sample data 
library(dplyr)
df <- data.frame(a=rep(LETTERS,3), b=rep(letters,3), 
             nobs=sample(1:100, 26*3,replace=T), stringsAsFactors=F)

# Get all unique combinations of col1 and col2
combos <- df %>%
  group_by(a,b) %>% 
  summarize(n=sum(nobs)) %>% 
  as.data.frame(.) 

top12 <- combos %>% 
  arrange(desc(n)) %>% 
  top_n(12,n)
top12

l <- list()
for(i in 1:11){
  l[[i]] <- combos[combos$a==top12[i,"a"] & combos$b==top12[i,"b"],]
}

l[[12]] <- combos %>% 
  anti_join(top12,by=c("a","b")) 
l

# This produces a list 'l' that contains twelve data frames -- the top 11 most-commonly occuring pairs of col1 and col2, and all the rest of the data in the 12th list element.
于 2017-09-18T14:23:28.463 回答