按 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