R语言 数据框中多个变量的频率计数
一个数据框架可能包含重复或缺失的值。每一列都可能包含同一变量的任何数量的重复或重复实例。数据统计和分析大多依赖于计算频率或计算特定变量在每一列中包含的实例数的任务,在R编程语言中,有多种方法可以做到这一点。
方法1:使用apply()方法
基础R语言中的apply方法返回一个向量或数组,或通过将一个函数应用于数组或矩阵的边际获得的数值列表。它的语法如下:
apply ( df , axis , FUN)
table()方法将交叉分类因子归入一个向量,建立一个每个因子水平组合的计数的或然表。或然率表基本上是对多个变量的计数和/或百分比的列表。它排除了对提供给该方法的因素变量的任何缺失值的计算。返回的输出是一个表格的形式。这个方法可以用来进行交叉分析和统计分析。
例1: 在这里,我们对数据框架中的所有列进行逐列返回,表明变量值实例在该特定列中出现的频率。
set.seed(1)
# creating a data frame
data_frame <- 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_frame)
# calculating frequency of multiple variables
mod_frame <- apply(data_frame, 2 , table)
print ("Frequencies")
print (mod_frame)
输出
[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] "Frequencies"
col1
a b c
3 2 3col2
a b c
3 3 2
col3
a b c
4 2 2col4
a b
4 4
例2: 也只针对特定的列,通过以向量的形式指定所需的列名,并使用数据帧索引df[cols]来寻址。输出结果以表格的形式返回,其中列标题是所需的列名,行标题是找到的不同值。
set.seed(1)
# creating a data frame
data_frame <- 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_frame)
sel_col <- c("col1", "col3")
# calculating frequency of multiple variables
mod_frame <- apply(data_frame[sel_col], 2, table)
print ("Frequencies")
print (mod_frame)
输出
[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] "Frequencies"
col1 col3
a 3 4
b 2 2
c 3 2
方法2:使用plyr包
plyr包最好用于实验数据,即创建、修改和删除数据框架的列,使其受到多种条件和用户定义的函数的影响。它可以被下载并通过以下命令加载到工作区。
install.packages("lpyr")
这个包的count()方法用于分别返回指定列中包含的变量的频率计数。它可能包含多个列,所有可能的组合都按照交叉连接的方式生成。其中唯一的组合将与它们各自的计数一起返回。
count (df , args..) , where args.. are the column names
输出只返回count()方法中指定的列。
library("plyr")
set.seed(1)
# creating a data frame
data_frame <- 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_frame)
sel_col <- c("col1")
# calculating frequency of multiple variables
mod_frame <- count(data_frame, sel_col)
print ("Frequencies")
print (mod_frame)
输出
[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] "Frequencies"
col1 freq
1 a 3
2 b 2
3 c 3