R语言 如何计算一个数据框架中所有行或列的模式

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程