R语言 按组选择前N个最高值

R语言 按组选择前N个最高值

在这篇文章中,我们将看到如何在R语言中按组选择前N个 最高值。

方法1:使用降序法

可以通过order方法将数据帧按组的数值降序排列。然后使用索引方法访问相应的数据框架,以行索引的形式获取order函数的输出。

语法: order(vec, decreasing = TRUE)

参数:

  • vec – 要按降序排列的数据框架列名
  • decreasing – 将数据按降序排列的标志。

基础R中的Reduce方法也可以用来从数据框架的每一组中选择最高的n行。这个方法的输入是一个有两个参数的函数f,还有一个列表或向量vec,这个列表或向量要用函数f来进行缩减。R中的by()方法是用来将一个函数应用于数据框架的指定子集。这个方法的第一个参数是数据,第二个参数是应用函数的对象,第三个参数是函数。这里,head被用作使用方法调用的第三个参数指定的函数。它被用来指定数据框架中的n行组。

语法: by(df, df$col-name, FUN)

参数:

  • df – 要应用函数的数据框架
  • FUN – 要应用的函数

组合函数的应用可以总结为以下几点。

Reduce(rbind,by())
R

代码

# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data by the column
# required in descending order
data_sorted <- data_frame[order(data_frame$col2,
                                decreasing = TRUE), ]
 
# select top 3 values from each group
data_mod <- Reduce(rbind,                               
                    by(data_sorted,
                       data_sorted["col1"],
                       head,
                       n = 3))
 
print ("Modified DataFrame")
print (data_mod)
R

输出

在R语言中按组选择前N个最高值

方法2:使用dplyr包

R中的dplyr包用于在R中进行突变和数据操作,它对于处理数据帧和数据表特别有用。该软件包可以通过以下命令下载并安装到工作目录中。

install.packages(“dplyr”)
R

在这个包中有一连串的方法,用来从一个数据框架的每组中选择前n行。最初,arrange()方法被调用,以升序或降序的方式排列数据框架的数据。降序是使用desc()方法调用的。在这个方法中作为参数指定的列名被用于排列数据。

arrange(desc(col-name))
R

随后是group_by方法的应用,该方法将用于分组数据的列名集合作为参数。它可以由一个或多个列组成。

group_by(col-name1, col-name2..)
R

然后使用slice()方法从数据框架中检索出最上面的n行。

slice(1:n)
R

输出是以tibble的形式返回的,包含返回的行的全部信息。原始数据框架的行号不会被保留。

代码

library("dplyr")
 
# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data by the column
# required in descending order
data_mod<- data_frame %>%                                     
  arrange(desc(col2)) %>%
  group_by(col1) %>%
  slice(1:3)
print("Modified DataFrame")
print(data_mod)
R

输出

在R语言中按组选择前N个最高值

方法3:使用data.table包

R语言中的data.table方法被用来以一种良好的组织方式进行数据存储和操作。可以使用以下命令将该包下载并安装到工作目录中。

install.packages(data.table)
R

数据表可以通过order方法按组以其值的降序重新排序。然后使用索引方法访问相应的数据框架,方法是以行索引的形式获取order函数的输出。

语法: order(vec, decreasing = TRUE)

参数 :

Vec – 要按降序排列的数据框架列名
decreasing – 按降序设置数据的标志

然后,可以使用data.table()方法将数据框架转换为数据表,并在setKey()方法中使用列名。key属性包含了在data.table中对数据进行分组的列名。

data.table(df, key = )
R

现在,head和.SD属性可以用来访问每个所取组的前n行。by参数包含了分组的列。head方法的参数是.SD和整数值n。

df[ , head(.SD, 3), by =]
R

代码

library("data.table")
 
# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data in descending order
 
# Top N highest values by group
data_mod <- data_frame[order(data_frame$col2, decreasing = TRUE), ] 
 
# organising the data by group
data_mod <- data.table(data_mod, key = "col1")
 
# getting top2 values
data_mod <- data_mod[ , head(.SD, 2), by = col1]
 
# printing modified dataframe                                      
print("Modified DataFrame")
print(data_mod)
R

输出

在R语言中按组选择前N个最高值

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册