如何在 R 中聚合 Data.table 中的多列?
在本文中,我们将讨论如何在 R 编程语言中聚合 Data.table 中的多列。
data.table 包含可能重复或唯一的元素。因此,变量根据它们可以被隔离的集合被分成几类。可以对列值求和,以便列包含变量频率计数的总和。
方法 1:使用 list() 方法
标准数据表索引方法可用于分离和聚合包含在数据框中的数据。 “by”属性用于根据 list() 方法中提供的特定列名来划分数据。可以添加一个新变量,其中包含使用 sum() 方法获得的值的总和,该方法包含要求和的列。
句法:
df[ , new-col-name:=sum(reqd-col-name), by = list(grouping columns)]
例子:
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 的应用结果。
Syntax:
lapply(obj, FUN, …)
Parameters :
- obj – a vector (atomic or list) or an expression object.
- FUN – the function to be applied over elements.
.SD 属性用于计算更大的变量列表的汇总统计。 sum函数用作计算分类属于每个组变量的元素的总和的函数。在执行聚合时,'by' 属性等效于 SQL 中的 'group by'。
句法:
lapply (.SD , 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")
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 中的一个或多个变量生成汇总统计信息。
Syntax:
aggregate(sum_var ~ group_var, data = df, FUN = sum)
Parameters :
- sum_var – The columns to compute sums for
- group_var – The columns to group data by
- data – The data frame to take
- FUN – The function to apply
如果分组变量是列的组合,则使用 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