📜  如何在 R 中聚合 Data.table 中的多列?

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

如何在 R 中聚合 Data.table 中的多列?

在本文中,我们将讨论如何在 R 编程语言中聚合 Data.table 中的多列。

data.table 包含可能重复或唯一的元素。因此,变量根据它们可以被隔离的集合被分成几类。可以对列值求和,以便列包含变量频率计数的总和。

方法 1:使用 list() 方法

标准数据表索引方法可用于分离和聚合包含在数据框中的数据。 “by”属性用于根据 list() 方法中提供的特定列名来划分数据。可以添加一个新变量,其中包含使用 sum() 方法获得的值的总和,该方法包含要求和的列。

句法:

例子:

R
# importing required libraries
library(data.table)
  
# creating a data frame
data_frame <- data.table(col1 = sample(6:8, 12 , replace = TRUE),
                         col2 = letters[1:2],
                         col3 = 1)
  
print ("Original DataFrame")
print (data_frame)
  
# compute the sum of col3 using grouping 
# of col1 and col2
data_frame[ , count:=sum(col3), by = list(col1, col2)] 
  
print ("Modified DataFrame")
print (data_frame)


R
# importing required libraries
library(data.table)
  
# creating a data frame
data_frame <- data.table(col1 = sample(6:8, 12 , replace = TRUE),
                         col2 = 1:2,
                         col3 = 1)
  
print ("Original DataFrame")
print (data_frame)
  
print ("Modified DataFrame")
data_frame[, lapply(.SD, sum), by= col1]


R
# importing required libraries
library(data.table)
  
# creating a data frame
data_frame <- data.table(col1 = sample(6:8, 12 , replace = TRUE),
                         col2 = 1:2,
                         col3 = 1)
  
print ("Original DataFrame")
print (data_frame)
  
print ("Modified DataFrame")
aggregate(cbind(col2,col3) ~ col1, data = data_frame, FUN = sum)


输出

[1] "Original DataFrame" 
   col1 col2 col3  
1:    7    a    1  
2:    6    b    1  
3:    8    a    1  
4:    7    b    1  
5:    6    a    1  
6:    8    b    1  
7:    7    a    1  
8:    8    b    1  
9:    8    a    1 
10:   7    b    1 
11:   6    a    1 
12:   7    b    1 
[1] "Modified DataFrame" 
  col1 col2 col3 count  
1:    7    a    1   2  
2:    6    b    1   1  
3:    8    a    1   2  
4:    7    b    1   3  
5:    6    a    1   2  
6:    8    b    1   2  
7:    7    a    1   2  
8:    8    b    1   2  
9:    8    a    1   2 
10:   7    b    1   3 
11:   6    a    1   2 
12:   7    b    1   3

方法 2:使用lapply()

data.table 库可以安装并加载到工作空间中。然后可以将 lapply() 方法应用于此 data.table 对象,以使用组聚合多个列。 lapply() 方法用于返回与输入列表长度相同的对象。返回的每个元素都是函数FUN 的应用结果。

.SD 属性用于计算更大的变量列表的汇总统计。 sum函数用作计算分类属于每个组变量的元素的总和的函数。在执行聚合时,'by' 属性等效于 SQL 中的 'group by'。



句法:

例子:

电阻

# importing required libraries
library(data.table)
  
# creating a data frame
data_frame <- data.table(col1 = sample(6:8, 12 , replace = TRUE),
                         col2 = 1:2,
                         col3 = 1)
  
print ("Original DataFrame")
print (data_frame)
  
print ("Modified DataFrame")
data_frame[, lapply(.SD, sum), by= col1]

输出

[1] "Original DataFrame"
col1 col2 col3  
1:    7    1    1  
2:    7    2    1  
3:    8    1    1  
4:    8    2    1  
5:    8    1    1  
6:    6    2    1  
7:    7    1    1  
8:    7    2    1  
9:    8    1    1 
10:    6    2    1 
11:    7    1    1 
12:    7    2    1 
[1] "Modified DataFrame" 
   col1 col2 col3 
1:    7    9    6 
2:    8    5    4 
3:    6    4    2

方法 3:使用聚合方法

R 中的aggregate()函数用于分别为数据框或data.table 中的一个或多个变量生成汇总统计信息。

如果分组变量是列的组合,则使用 cbind() 方法组合要检索的列。要应用的 FUN 等效于 sum,其中返回每个列对特定分类组的总和。

例子:

电阻

# importing required libraries
library(data.table)
  
# creating a data frame
data_frame <- data.table(col1 = sample(6:8, 12 , replace = TRUE),
                         col2 = 1:2,
                         col3 = 1)
  
print ("Original DataFrame")
print (data_frame)
  
print ("Modified DataFrame")
aggregate(cbind(col2,col3) ~ col1, data = data_frame, FUN = sum)

输出

[1] "Original DataFrame"
col1 col2 col3 
1:    6    1    1  
2:    6    2    1  
3:    7    1    1  
4:    6    2    1  
5:    6    1    1  
6:    7    2    1  
7:    8    1    1  
8:    6    2    1  
9:    8    1    1 
10:    6    2    1 
11:    7    1    1 
12:    7    2   
[1] "Modified DataFrame" 
col1 col2 col3 
1    6   10    6 
2    7    6    4 
3    8    2    2