📜  计算R Dataframe中每列变量的频率

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

计算R Dataframe中每列变量的频率

数据框可能包含重复或缺失值。每列可能包含相同变量的任意数量的重复或重复实例。数据统计和分析主要依赖于计算特定变量在每列中包含的实例数的频率或计数的任务。在本文中,我们将了解如何在 R 编程语言中的 Dataframe 中查找每列变量的频率。

方法一:使用plyr包

plyr 包优选用于对数据进行实验,即创建、修改和删除数据框的列,使它们服从多个条件和用户定义的函数。可以使用以下命令将其下载并加载到工作区中:

install.packages("lpyr")

该包的 ldply() 方法用于对列表的每个元素应用预定义的函数,然后将结果组合成一个数据框。此方法可用于计算属于 integer、 字符或 factor 类型类的变量的频率。

在此方法中, sum()函数作为函数应用于属于数据框的每一列的元素。该函数得出特定指定值在列中出现的次数的总和。该函数单独应用于每一列。返回的输出采用数据框的形式,其中第一列给出分配给数据框的列名称,第二列显示该列中指定变量的总出现次数。

代码:

R
library ('plyr')
set.seed(1)  
# creating a data frame
data_table <- data.frame(col1 =  sample(letters[1:3], 8, 
                                        replace = TRUE) ,
                         col2 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col3 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col4 = sample(letters[1:3], 8, 
                                       replace = TRUE))
  
print ("Original DataFrame")
print (data_table)
print ("Count of value per column")
  
# count number of c in each column
ldply(data_table, function(c) sum(c =="a"))


R
library ('plyr')
  
set.seed(1)  
  
# creating a data frame
data_table <- data.frame(col1 =  sample(letters[1:3], 8, 
                                        replace = TRUE) ,
                         col2 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col3 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col4 = sample(letters[1:3], 8, 
                                       replace = TRUE))
  
print ("Original DataFrame")
print (data_table)
print ("Count of value per column")
ldply(data_table, function(c) sum(c %in% vec))


R
set.seed(1)  
  
# creating a data frame
data_table <- data.frame(col1 =  sample(letters[1:3], 8,
                                        replace = TRUE) ,
                         col2 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col3 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col4 = sample(letters[1:3], 8,
                                       replace = TRUE))
  
print ("Original DataFrame")
print (data_table)
  
# compute unique levels in data frame
lvls <- unique(unlist(data_table))
  
# apply the summation per value 
freq <- sapply(data_table, 
               function(x) table(factor(x, levels = lvls, 
                                        ordered = TRUE)))
print ("Count of variables per column")
print (freq)


输出:

[1] "Original DataFrame" 
  col1 col2 col3 col4 
1    a    b    b    a 
2    c    c    b    b 
3    a    c    c    a 
4    b    a    a    a 
5    a    a    c    b 
6    c    a    a    b 
7    c    b    a    b 
8    b    b    a    a    
[1] "Count of value per column"
   .id V1 
1 col1  3 
2 col2  3 
3 col3  4 
4 col4  4

该方法还可用于计算值向量的频率。该函数的定义方式是,它使用 %in%运算符验证向量内元素的出现。然后将每列中 TRUE 出现的总和作为计数返回。



代码:

电阻

library ('plyr')
  
set.seed(1)  
  
# creating a data frame
data_table <- data.frame(col1 =  sample(letters[1:3], 8, 
                                        replace = TRUE) ,
                         col2 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col3 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col4 = sample(letters[1:3], 8, 
                                       replace = TRUE))
  
print ("Original DataFrame")
print (data_table)
print ("Count of value per column")
ldply(data_table, function(c) sum(c %in% vec))

输出:

[1] "Original DataFrame"
  col1 col2 col3 col4
1    a    b    b    a
2    c    c    b    b
3    a    c    c    a
4    b    a    a    a
5    a    a    c    b
6    c    a    a    b
7    c    b    a    b
8    b    b    a    a    
[1] "Count of value per column"
   .id V1
1 col1  5
2 col2  6
3 col3  6
4 col4  8

方法二:使用sapply() 方法

sapply() 方法,用于计算数据框每一列中变量出现的频率。 sapply() 方法用于在向量或列表上应用函数,并根据这些计算返回输出。

sapply (df , FUN)

在这种情况下,FUN 是一个用户定义的函数,它最初计算整个数据框单元格内的级别数。这是通过应用 unlist() 方法来完成的,该方法用于将数据框转换为嵌套列表。接下来是应用 unique() ,它仅提取数据框中包含的唯一变量值。

unique (list)

作为 unique() 方法的输出获得的向量通过 factor() 方法显式转换为因子类型对象,其中级别是遇到的唯一值。因此,所有组件都映射到该向量内的级别。

factor (vec)

最后,然后应用 table() 方法。 table() 方法采用属于向量的交叉分类因子来构建每个因子级别组合的计数列联表。列联表基本上是多个变量的计数和/或百分比的表格。它从提供给方法的因子变量中排除了任何缺失值的计数。返回的输出采用表格的形式。该方法可用于交叉制表和统计分析。

table (fac-vec, .. )

输出是一个数据框,行标题作为数据框的唯一值,列标题作为原始数据框的列名,其中每个单元格值表示该行标题变量在相应列中的出现次数。

代码:

电阻

set.seed(1)  
  
# creating a data frame
data_table <- data.frame(col1 =  sample(letters[1:3], 8,
                                        replace = TRUE) ,
                         col2 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col3 = sample(letters[1:3], 8,
                                       replace = TRUE),
                         col4 = sample(letters[1:3], 8,
                                       replace = TRUE))
  
print ("Original DataFrame")
print (data_table)
  
# compute unique levels in data frame
lvls <- unique(unlist(data_table))
  
# apply the summation per value 
freq <- sapply(data_table, 
               function(x) table(factor(x, levels = lvls, 
                                        ordered = TRUE)))
print ("Count of variables per column")
print (freq)

输出:

[1] "Original DataFrame"
  col1 col2 col3 col4
1    a    b    b    a
2    c    c    b    b
3    a    c    c    a
4    b    a    a    a
5    a    a    c    b
6    c    a    a    b
7    c    b    a    b
8    b    b    a    a 
[1] "Count of variables per column" 
  col1 col2 col3 col4 
a    3    3    4    4 
c    3    2    2    0 
b    2    3    2    4