R 使用相同列值将数据帧分组到12个组中
我有一个大约15列、300多万行的大型数据集 因为数据集太大了,我想在它上面使用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的独特组合 如果这
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抱歉,我不明白。请编辑您的问题,并包括一些可复制的数据和您的预期输出。检查一下这个。