📜  如何从 R 中的数据帧计算所有行或列的模式?

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

如何从 R 中的数据帧计算所有行或列的模式?

在本文中,我们将讨论如何在 R 编程语言中计算数据帧中所有行和列的众数。

方法一:使用 DescTools 包

R 中的 DescTools 包用于执行描述性分析。它包含一系列杂项基本统计函数和方便的包装器,用于有效地描述数据。可以使用以下语法将其安装到 R 工作空间中:

install.packages("DescTools")

此包的 mode() 方法用于从输入向量中返回最常出现的数字或字符值。

在这种方法中,会启动一个 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