R语言 如何为分类数据创建一个频数表
在这篇文章中,我们将看到如何在R编程语言中为分类数据创建一个频数表。
方法1:使用table()方法
R语言中的表是用来更好地组织和总结分类变量的。table()方法将属于向量的交叉分类因子建立一个每个因子水平组合的计数的或然表。或然率表基本上是对多个变量的计数和/或百分比的列表。它排除了对提供给该方法的因素变量的任何缺失值的计算。返回的输出是一个表格的形式。这种方法可用于交叉分析和统计分析。
table (fac-vec, .. )
它可以用as.data.frame()方法转换为数据框架,以表格结构的形式返回输出,组织成两列,第一列包含输入因子变量,第二列是相应变量的计数,用 “Freq “指定。
as.data.frame(table)
如果只指定了一个参数,那么结果数据框中的行数就相当于因子的唯一水平数。rep()方法也被用来重复第一个参数n次。
代码 。
# creating a factor vector
vec <- factor(c(letters[1 : 12],
letters[8 : 24],
letters[4 : 6]))
# replicate the vector 2 times
fac_vec <- rep(vec , 2)
# generating frequency table of
# the factor vector
freq <- table(fac_vec)
print ("Frequency DataFrame")
# converting the table into dataframe
freq_df <- as.data.frame(freq)
print (freq_df)
输出 。
[1] "Frequency DataFrame"
fac_vec Freq
1 a 2
2 b 2
3 c 2
4 d 4
5 e 4
6 f 4
7 g 2
8 h 4
9 i 4
10 j 4
11 k 4
12 l 4
13 m 2
14 n 2
15 o 2
16 p 2
17 q 2
18 r 2
19 s 2
20 t 2
21 u 2
22 v 2
23 w 2
24 x 2
table()方法可以接受多个参数作为输入,结果是返回一个包含所有可能的唯一组合的数据框。第一个参数的每个值都与第二个参数的值进行映射,并返回这种组合的频率。
set.seed(1)
# creating a dataframe
data_frame = data.frame(
"col1" = sample(1:2, 8, replace = TRUE) ,
"col2" = sample(letters[1:3], 8, replace = TRUE)
)
print ("Data Frame")
print (data_frame)
# generating frequency table of the
# factor vector
freq <- table(data_framecol1, data_framecol2)
print ("Frequency DataFrame")
# converting the table into dataframe
freq_df <- as.data.frame(freq)
print (freq_df)
输出 。
[1] "Data Frame"
col1 col2
1 1 b
2 2 b
3 1 c
4 1 c
5 2 a
6 1 a
7 1 a
8 1 b
[1] "Frequency DataFrame"
Var1 Var2 Freq
1 1 a 2
2 2 a 1
3 1 b 2
4 2 b 1
5 1 c 2
6 2 c 0
下面的程序说明了计算大数据集的频率分布并将其可视化的概念。
library(data.table)
library("ggplot2")
# importing the dataset
file <- fread('ch11b.dat')
print ("Dataset 5 rows")
head(file)
data <- as.data.frame(file)
freq <- table(data$V5)
print ("Frequency count of column V5")
print (freq)
# re-order levels
compute <- function(x) {
freq <- table(x)
factor(x, levels = names(sort(freq)))
}
# plotting the data
ggplot(data, aes(x = compute(`V5`))) +
geom_bar() +
xlab("Gender")
输出 。
[1] "Dataset 5 rows"
V1 V2 V3 V4 V5
1: 1 307 930 36.58 0
2: 2 307 940 36.73 0
3: 3 307 950 36.93 0
4: 4 307 1000 37.15 0
5: 5 307 1010 37.23 0
6: 6 307 1020 37.24 0
[1] "Frequency count of column V5"
0 1
38 62
V5列的频率分布
方法2:使用count()方法
“plyr “包用于数据操作和修改,可以用.NET安装到工作空间。
install.packages("plyr")
plyr包中的count()方法被用来保存所遇到的分类变量的频率计数。该方法的调用等同于as.data.frame(table(x))。然而,它并不包括计数为零的组合。这个方法被认为比table()方法更好,因为它更快,并且以数据框架的形式返回输出,行和列都有直接标题。
count( fac-vec, .. )
代码 。
# importing required libraries
library("plyr")
# creating a factor vector
vec <- factor(c(letters[1:12],
letters[8:24],
letters[4:6]))
# replicate the vector 2 times
fac_vec <- rep(vec , 2)
# generating frequency table of the
# factor vector
freq <- count(fac_vec)
print ("Frequency DataFrame")
print (freq)
输出
[1] "Frequency DataFrame"
x Freq
1 a 2
2 b 2
3 c 2
4 d 4
5 e 4
6 f 4
7 g 2
8 h 4
9 i 4
10 j 4
11 k 4
12 l 4
13 m 2
14 n 2
15 o 2
16 p 2
17 q 2
18 r 2
19 s 2
20 t 2
21 u 2
22 v 2
23 w 2
24 x 2
下面的代码片段说明了table()方法在非常大的数据集上的使用情况,该数据集有10个 元素,分为男性和女性两个类别。
# creating a factor vector
fac_vec <- factor(sample(c("Male", "Female"),
100000 , replace = TRUE))
# generating frequency table of the factor vector
freq <- count(fac_vec)
print ("Frequency DataFrame")
# converting the table into data frame
freq_df <- as.data.frame(freq)
print (freq_df)
输出 。
[1] "Frequency DataFrame"
x freq
1 Female 49936
2 Male 50064