📜  如何为 R 中的分类数据创建频率表?

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

如何为 R 中的分类数据创建频率表?

在本文中,我们将看到如何在 R 编程语言中为分类数据创建频率表。

方法 1:使用 table() 方法

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

table (fac-vec, .. )

可以使用 as.data.frame() 方法将其转换为数据框,该方法以表格结构的形式返回输出,分为两列,第一列包含输入因子变量,第二列包含相应变量的计数,由“频率”指定。

as.data.frame(table)

如果指定了单个参数,则结果数据框中的行数等于因子的唯一级别数。 rep() 方法也用于重复第一个参数 n 次。



代码:

R
# 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)


R
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_frame$col1, data_frame$col2)
print ("Frequency DataFrame")
  
# converting the table into dataframe
freq_df <- as.data.frame(freq)
print (freq_df)


R
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")


R
# 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)


R
# 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"
   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_frame$col1, data_frame$col2)
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 列上的频率分布

方法二:使用count()方法

“plyr”包用于数据操作和修改,可以使用以下命令安装到工作空间中:

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 5 个元素的幂的非常大的数据集上的使用,该数据集分为男性和女性两类:

电阻

# 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