计算 R DataFrame 中每组中的行数
R 编程语言中的 DataFrame 可能包含并非所有值都是唯一的列。数据框中的重复值可以分成一组。可以使用 R 编程语言中的各种外部包来捕获对应于相同列序列的频率。
方法一:使用 dplyr 包
R 中的“dplyr”包用于执行数据增强和操作。我们可以使用此方法中的某些功能来帮助实现我们的功能。
- 使用 Tally() 和 group_by() 方法
R 中的 group_by() 方法可用于基于单列或一组多列将数据分类到组中。输入列的所有可能的独特组合都堆叠在一起作为一个组。
句法:
group_by(args .. )
Where, the args contain a sequence of column to group data upon
R 中的tally() 方法用于汇总数据并计算每个组所属的值的数量。在连续应用这些方法后,将执行数据帧突变以返回一个表,其中特定输入列按照它们在 group_by() 方法中出现的顺序返回,然后是包含这些组的频率计数的列“n”。
这种方法被认为比其他方法更好,因为它返回有关指定数据帧的列类的详细信息。
例子:
R
library("dplyr")
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3])
print ("Original DataFrame")
print (data_frame)
# group by column1 values and count
# the total in each
data_frame %>% group_by(col1) %>%tally()
R
library("dplyr")
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
# count rows by col1 and col3 group
data_frame %>% dplyr::count(col1, col3)
R
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
data_table <- data.table(data_frame)
data_table[, .N, by = list(col1, col3)]
R
data_frame <- data.frame(col1 = sample(1:2,9,replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("keeping a count of all groups")
data_mod <- aggregate(col3 ~ col1 + col2,
data = data_frame,
FUN = length)
print (data_mod)
输出
[1] "Original DataFrame"
col1 col2
1 1 a
2 1 b
3 1 c
4 2 a
5 2 b
6 2 c
7 3 a
8 3 b
9 3 c >
# A tibble: 3 x 2
col1 n
1 1 3
2 2 3
3 3 3
- 使用 dplyr::count() 方法
count() 方法可以应用于包含一列或多列的输入数据帧,并返回与每个组相对应的频率计数。应用此方法返回的列是原始数据帧列的适当子集。结果中出现的列是 count() 方法中出现的列。
句法:
count(args .. ),
Where, the args contain a sequence of column to group data upon
例子:
电阻
library("dplyr")
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
# count rows by col1 and col3 group
data_frame %>% dplyr::count(col1, col3)
输出:
[1] "Original DataFrame"
col1 col2 col3
1 1 a 1
2 1 b 4
3 1 c 1
4 2 a 2
5 2 b 2
6 2 c 3
7 3 a 1
8 3 b 2
9 3 c 2
[1] "Modified DataFrame"
col1 col3 n
1 1 1 2
2 1 4 1
3 2 2 2
4 2 3 1
5 3 1 1
6 3 2 2
方法 2:使用 data.table 包
R 中的 data.table 包可用于以有组织的表格结构检索和存储数据。 data_table 索引的.N属性可用于分类保留遇到的指定列组合的频率计数。列是使用 R 中的 list() 方法在“by”属性中指定的,它是 group_by() 方法的替代方法。
句法:
data_table[, .N, by = list(cols..)]
例子:
电阻
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
data_table <- data.table(data_frame)
data_table[, .N, by = list(col1, col3)]
输出
[1] "Original DataFrame"
col1 col2 col3
1 1 a 1
2 1 b 4
3 1 c 1
4 2 a 2
5 2 b 2
6 2 c 3
7 3 a 1
8 3 b 2
9 3 c 2
[1] "Modified DataFrame"
col1 col3 N
1: 1 1 2
2: 1 4 1
3: 2 2 2
4: 2 3 1
5: 3 1 1
6: 3 2 2
方法 3:使用聚合方法
R 编程语言中的aggregate() 方法是一个通用函数,用于汇总和评估时间序列和数据帧。
Syntax:
aggregate(formula, data, FUN)
Parameter :
- formula : such as y ~ x where the y variables are numeric data to be split into groups according to the grouping x variables.
- by – grouping elements
- FUN – function to be applied
这里要应用的函数是长度,它计算与每个组关联的频率。它计算公式中提到的所有列的合理组合,并显示每个列的相关频率。因此,它用于对所有列执行聚合。
例子:
电阻
data_frame <- data.frame(col1 = sample(1:2,9,replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,3,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("keeping a count of all groups")
data_mod <- aggregate(col3 ~ col1 + col2,
data = data_frame,
FUN = length)
print (data_mod)
输出
[1] "Original DataFrame"
col1 col2 col3
1 2 a 1
2 2 b 4
3 1 c 1
4 1 a 2
5 1 b 2
6 2 c 3
7 2 a 1
8 2 b 2
9 1 c 2
[1] "keeping a count of all groups"
col1 col2 col3
1 1 a 1
2 2 a 2
3 1 b 1
4 2 b 2
5 1 c 2
6 2 c 1