📜  按 R 中的多列对 data.table 进行分组

📅  最后修改于: 2022-05-13 01:55:39.227000             🧑  作者: Mango

按 R 中的多列对 data.table 进行分组

在本文中,我们将讨论如何在 R 编程语言中按多列对 data.table 进行分组。

包 data.table 可用于处理数据表以及子集和组织数据。可以使用以下命令将其下载并安装到工作区中:

library(data.table)

可以使用列表子集提取指定索引处的列,即 [, 运算符。新列可以添加到分配给在 data.table 的一组列上定义的预定义或用户定义函数的第二个参数中。可以添加by参数以使用数据表中的一组列对数据进行分组。 list() 方法可用于指定 data.table 的一组列以对数据进行分组。

示例:按多列对 data.table 进行分组

R
library(data.table)
  
# creating first data frame
data_frame <- data.table(col1 = rep(LETTERS[1:3],each=2),
                  col2 = c(5:10),
                  col3 = c(TRUE,FALSE)
                  )
  
print ("Original DataFrame")
print (data_frame)
  
# group by col1,col3
data_mod <- data_frame[ , count:=sum(col2), 
                       by = list(col1,col3)]  
  
# print modified data frame
print ("Modified DataFrame") 
print(data_mod)


R
library(data.table)
  
# creating first data frame
data_frame <- data.table(col1 = rep(LETTERS[1:3],each=2),
                         col2 = c(1:6),
                         col3 = TRUE
                        )
  
print ("Original DataFrame")
print (data_frame)
  
# group by col1,col3
data_mod <- data_frame[ , count:=sum(col2), 
                       by = list(col1,col3)]  
  
# print modified data frame
print ("Modified DataFrame") 
print(data_mod)


R
library(data.table)
  
# creating first data frame
data_frame <- data.table(col1 = rep(LETTERS[1:3],each=2),
                         col2 = c(1,1,3,4,5,6),
                         col3 = 1
                        )
print ("Original DataFrame")
print (data_frame)
  
# group by col1,col3
data_mod <- data_frame[ , count:=sum(col2), 
                       by = list(col1,col2,col3)]  
  
# print modified data frame
print ("Modified DataFrame") 
print(data_mod)


输出:

[1] "Original DataFrame"
   col1 col2  col3 
1:    A    5  TRUE 
2:    A    6 FALSE 
3:    B    7  TRUE 
4:    B    8 FALSE 
5:    C    9  TRUE 
6:    C   10 FALSE 
[1] "Modified DataFrame" 
   col1 col2  col3 count 
1:    A    5  TRUE     5 
2:    A    6 FALSE     6 
3:    B    7  TRUE     7 
4:    B    8 FALSE     8 
5:    C    9  TRUE     9 
6:    C   10 FALSE    10

在上面的例子中,由于没有一个组是相同的,因此,新列的“计数”值等同于 col2 值。

如果存在属于相同组的列,则生成与每一列对应的总和。

示例:按多列对 data.table 进行分组

电阻

library(data.table)
  
# creating first data frame
data_frame <- data.table(col1 = rep(LETTERS[1:3],each=2),
                         col2 = c(1:6),
                         col3 = TRUE
                        )
  
print ("Original DataFrame")
print (data_frame)
  
# group by col1,col3
data_mod <- data_frame[ , count:=sum(col2), 
                       by = list(col1,col3)]  
  
# print modified data frame
print ("Modified DataFrame") 
print(data_mod)

输出:

[1] "Original DataFrame" 
   col1 col2 col3 
1:    A    1 TRUE 
2:    A    2 TRUE 
3:    B    3 TRUE 
4:    B    4 TRUE 
5:    C    5 TRUE 
6:    C    6 TRUE 
[1] "Modified DataFrame" 
   col1 col2 col3 count 
1:    A    1 TRUE     3 
2:    A    2 TRUE     3 
3:    B    3 TRUE     7 
4:    B    4 TRUE     7 
5:    C    5 TRUE    11 
6:    C    6 TRUE    11

也可以使用 data.table 的所有列对数据进行分组,如下面的代码片段所示。

示例:按多列对 data.table 进行分组

电阻

library(data.table)
  
# creating first data frame
data_frame <- data.table(col1 = rep(LETTERS[1:3],each=2),
                         col2 = c(1,1,3,4,5,6),
                         col3 = 1
                        )
print ("Original DataFrame")
print (data_frame)
  
# group by col1,col3
data_mod <- data_frame[ , count:=sum(col2), 
                       by = list(col1,col2,col3)]  
  
# print modified data frame
print ("Modified DataFrame") 
print(data_mod)

输出:

[1] "Original DataFrame" 
col1 col2 col3 
1:    A    1    1 
2:    A    1    1 
3:    B    3    1 
4:    B    4    1 
5:    C    5    1 
6:    C    6    1 
[1] "Modified DataFrame" 
col1 col2 col3 count 
1:    A    1    1     1 
2:    A    1    1     1 
3:    B    3    1     3 
4:    B    4    1     4 
5:    C    5    1     5 
6:    C    6    1     6