📜  计算 R DataFrame 中每组中的行数

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

计算 R DataFrame 中每组中的行数

R 编程语言中的 DataFrame 可能包含并非所有值都是唯一的列。数据框中的重复值可以分成一组。可以使用 R 编程语言中的各种外部包来捕获对应于相同列序列的频率。

方法一:使用 dplyr 包

R 中的“dplyr”包用于执行数据增强和操作。我们可以使用此方法中的某些功能来帮助实现我们的功能。

  • 使用 Tally() 和 group_by() 方法

R 中的 group_by() 方法可用于基于单列或一组多列将数据分类到组中。输入列的所有可能的独特组合都堆叠在一起作为一个组。

句法:

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() 方法中出现的列。

句法:



例子:

电阻

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() 方法的替代方法。

句法:

例子:

电阻



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() 方法是一个通用函数,用于汇总和评估时间序列和数据帧。

这里要应用的函数是长度,它计算与每个组关联的频率。它计算公式中提到的所有列的合理组合,并显示每个列的相关频率。因此,它用于对所有列执行聚合。

例子:

电阻

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