R语言 计算R数据框架中每一列变量的频率
一个数据框架可能包含重复或缺失的值。每一列都可能包含同一变量的任何数量的重复或重复实例。数据统计和分析大多依赖于计算一个特定变量在每一列中包含的实例数量的频率或计数的任务。在这篇文章中,我们将看到如何在R编程语言中找到数据框架中每列变量的频率。
方法1:使用plyr包
plyr包最好用于实验数据,即创建、修改和删除数据框架的列,使其受到多种条件和用户定义的函数的影响。它可以被下载并使用以下命令加载到工作区。
install.packages("lpyr")
本软件包的ldply()方法用于在一个列表的每个元素上应用一个预定义的函数,然后将结果合并成一个数据框。这个方法可以用来计算属于整数、字符或因子类型的变量的频率。
语法: ldply(data, fun = NULL)
参数:
data – 要应用的数据
fun – 要应用的函数
在这个方法中,sum()函数被作为一个函数应用于属于数据框架的每一列的元素。该函数的结果是对某一特定值在该列中出现的次数进行求和。该函数被单独应用于每一列。返回的输出是一个数据框的形式,其中第一列给出分配给数据框的列名,第二列显示该列中指定变量出现的总数。
代码
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"))
输出
[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出现的总和将作为计数返回。
val %in% vec
代码
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
方法2:使用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