R 使用相同列值将数据帧分组到12个组中

R 使用相同列值将数据帧分组到12个组中,r,multithreading,dataframe,multidplyr,R,Multithreading,Dataframe,Multidplyr,我有一个大约15列、300多万行的大型数据集 因为数据集太大了,我想在它上面使用multidplyr 由于数据的原因,不可能将数据框拆分为12个部分。假设有两列col1和col2,每列都有几个不同的值,但它们重复(分别在每列中) 如何创建12个(或n)大小相似的组,其中每个组都包含在col1和col2中具有相同值的行 示例:假设col1foo和col2中的一个可能值是bar。然后将它们分组,所有具有此值的行都将位于一个组中 为了使问题有意义,总是有12种以上的col1和col2的独特组合 如果这

我有一个大约15列、300多万行的大型数据集

因为数据集太大了,我想在它上面使用
multidplyr

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

如何创建12个(或
n
)大小相似的组,其中每个组都包含在
col1
col2
中具有相同值的行

示例:假设
col1
foo
col2
中的一个可能值是
bar
。然后将它们分组,所有具有此值的行都将位于一个组中

为了使问题有意义,总是有12种以上的
col1
col2
的独特组合

如果这是python,我会尝试使用for和while循环,但由于这是
R
,可能还有另一种方法。

试试:

# 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
#由于您没有提供示例数据,我创建了一些重复三次的数据。
#我在tidyverse中使用了dplyr。然后按列分组并切片
#n=2的数据是偶然的。
图书馆(tidyverse)
df%
排列(a,b)%>%
(a,b)组%>%
变异(n=1:n())
#A tibble:78 x 3
#分组:a、b[26]
a b n
1 A 1
2 A 2
3 A 3
4 B 1
5b2
6 B 3
7 C 1
8 C 2
9 C 3
第10天第1天
# ... 还有68行
在每组的两行上随机切片数据

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
set.seed(123)
df%>%
排列(a,b)%>%
(a,b)组%>%
变异(n=1:n())%>%
样本(2)
#A tibble:52 x 3
#分组:a、b[26]
a b n
1 A 1
2 A 2
3 B 2
4 B 3
5 C 3
6c1
7D2
8d3
9 E 2
10 E 1
# ... 还有42行
试试这个:

# 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
#由于您没有提供示例数据,我创建了一些重复三次的数据。
#我在tidyverse中使用了dplyr。然后按列分组并切片
#n=2的数据是偶然的。
图书馆(tidyverse)
df%
排列(a,b)%>%
(a,b)组%>%
变异(n=1:n())
#A tibble:78 x 3
#分组:a、b[26]
a b n
1 A 1
2 A 2
3 A 3
4 B 1
5b2
6 B 3
7 C 1
8 C 2
9 C 3
第10天第1天
# ... 还有68行
在每组的两行上随机切片数据

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
set.seed(123)
df%>%
排列(a,b)%>%
(a,b)组%>%
变异(n=1:n())%>%
样本(2)
#A tibble:52 x 3
#分组:a、b[26]
a b n
1 A 1
2 A 2
3 B 2
4 B 3
5 C 3
6c1
7D2
8d3
9 E 2
10 E 1
# ... 还有42行
#创建示例数据
图书馆(dplyr)
df%
汇总(n=汇总(nobs))%>%
as.data.frame(.)
前12%
排列(描述(n))%>%
顶部(12,n)
前12名
l
#创建样本数据
图书馆(dplyr)
df%
汇总(n=汇总(nobs))%>%
as.data.frame(.)
前12%
排列(描述(n))%>%
顶部(12,n)
前12名

谢谢,但我们可能误解了对方。我需要对所有数据进行分组,并将所有相同的数据放在一起。在这种情况下,对于n=2,我需要得到两个大小相似的组(因为df大小是偶数,大约39),这将包括所有元素。在这种情况下,如果我们按字母顺序排列,从A到M的所有元素,以及其他所有元素。如果n=3,一组大小为27(A到I),另一组大小为J到R,另一组大小为25(S到Z)。@Ravonrip抱歉,我不明白。请编辑您的问题,并包括一些可复制的数据和您的预期输出。也请检查一下。谢谢,但我们可能误解了对方。我需要对所有数据进行分组,并将所有相同的数据放在一起。在这种情况下,对于n=2,我需要得到两个大小相似的组(因为df大小是偶数,大约39),这将包括所有元素。在这种情况下,如果我们按字母顺序排列,从A到M的所有元素,以及其他所有元素。如果n=3,一组大小为27(A到I),另一组大小为J到R,另一组大小为25(S到Z)。@Ravonrip抱歉,我不明白。请编辑您的问题,并包括一些可复制的数据和您的预期输出。检查一下这个。