如何从 R 中的数据帧计算所有行或列的模式?
在本文中,我们将讨论如何在 R 编程语言中计算数据帧中所有行和列的众数。
方法一:使用 DescTools 包
R 中的 DescTools 包用于执行描述性分析。它包含一系列杂项基本统计函数和方便的包装器,用于有效地描述数据。可以使用以下语法将其安装到 R 工作空间中:
install.packages("DescTools")
此包的 mode() 方法用于从输入向量中返回最常出现的数字或字符值。
Syntax: Mode(vec, na.rm = FALSE)
Arguments :
vec – a (non-empty) numeric vector of values.
na.rm (Default : false)- Indicator of whether the missing values should be removed.
在这种方法中,会启动一个 for 循环来迭代所有列,然后在 Mode() 方法中将每个单独的列作为单独的向量提供。
代码:
R
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")
}
R
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")
}
R
# 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 : 1 3
2 : 2
3 : TRUE
在前面的示例中,与 col1 等效的数字返回到众数值。这会导致数据不明确或丢失。为了消除这个问题,显式转换为 as。字符()可以做到。
电阻
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
方法二:用户自定义方法
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