R语言 如何计算一个数据框架中所有行或列的模式
在这篇文章中,我们将讨论如何在R语言中计算数据框架中所有行和列的模式。
方法1:使用DescTools包
R语言中的DescTools包是用来进行描述性分析的。它包含了各种基本的统计函数和方便的封装器,用于有效地描述数据。它可以通过以下语法安装到R的工作空间中。
install.packages("DescTools")
该包的mode()方法用于从输入矢量中返回最常出现的数字或字符值。
语法: Mode(vec, na.rm = FALSE)
参数:
vec – 一个(非空的)数值向量。
na.rm (默认值:false)- 指示是否应该删除缺失的值。
在这种方法中,启动了一个for循环来遍历所有的列,然后每个单独的列在Mode()方法中作为一个单独的向量提供。
代码 。
library ("DescTools")
# declaring a dataframe
data_frame = data.frame(col1 = c("b", "b", "d", "e", "e") ,
col2 = c(0, 2, 1, 2, 5),
col3= c(TRUE, FALSE, FALSE,
TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
print ("Mode of columns \n")
# iterating over all the columns of the
# dataframe
for (i in 1:ncol(data_frame)){
# calculating mode of ith column
mod_val <- Mode(data_frame[,i])
cat(i, ": ",mod_val,"\n")
}
输出 。
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 2 TRUE
5 e 5 TRUE
[1] "Mode of columns"
1 : 1 3
2 : 2
3 : TRUE
在前面的例子中,col1的数字等价物被返回到模式值中。这导致了数据的模糊性或丢失。为了消除这个问题,可以明确转换为as.character()。
library ("DescTools")
# declaring a dataframe
data_frame = data.frame(col1 = c("b","b","d","e","e") ,
col2 = c(0,2,1,2,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
print ("Mode of columns \n")
# iterating over all the columns
# of the dataframe
for (i in 1:ncol(data_frame)){
# calculating mode of ith column
mod_val <- as.character(Mode(data_frame[,i]))
cat(i, ": ",mod_val,"\n")
}
输出 。
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 2 TRUE
5 e 5 TRUE
[1] "Mode of columns"
1 : b e
2 : 2
3 : TRUE
方法2:用户定义的方法
在数据框架的所有列上进行for循环迭代。该模式可以通过以下步骤使用用户定义的函数来计算。
第1步: 使用R中的unique()方法计算向量的唯一值,它返回向量的唯一值。
第2步: 调用Match方法,返回其第二个参数中第一个指定参数的(第一个)匹配位置的向量。第一个向量是原始列向量,第二个向量是唯一向量。
match (col , unique_vec)
第3步: 然后调用tabulate()方法,该方法将匹配的整数值向量作为输入,并计算每个整数在指定向量中出现的次数。
第4步: 使用max()方法计算这些表格中的最大值,然后将其作为该列的模式返回。
代码 。
# create function to compute mode
mode <- function(x) {
# function to compute unique values
# in vector
unq_data <- unique(x)
# map values to its number of occurrences
map_data <- match(x, unq_data)
# table of the data with its values
tabulate_data <- tabulate(map_data)
# compute maximum value from data
max_val <- max(tabulate_data)
# plot it form table
unq_data[tabulate_data == max_val]
}
# declaring a dataframe
data_frame = data.frame(col1 = c("b","b","d","e","e") ,
col2 = c(0,2,1,2,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
print ("Mode of columns \n")
# iterating over all the columns of
# the dataframe
for (i in 1:ncol(data_frame)){
# calculating mode of ith column
mod_val <- mode(data_frame[,i])
print (mod_val)
}
输出 。
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 2 TRUE
5 e 5 TRUE
[1] "Mode of columns"
[1] b e
Levels: b d e
[1] 2
[1] TRUE