R语言 使用Dplyr将一个函数应用到每个组中

R语言 使用Dplyr将一个函数应用到每个组中

在这篇文章中,我们将学习如何使用R编程语言中的dplyr对每个组应用一个函数。

R语言中的dplyr包用于数据操作和修改。该包可以通过以下命令下载并安装到工作空间。

install.packages("dplyr")

什么是tibble

tibble是R语言中一种类似于数据框架的结构,它包含以表格结构排列的行和列。它说明了数据框架的列的数据类型。它可以在R中使用以下维度来创建。

tibble( 
col-1-name = values,
col-2-name = values)

group_by()

为了将一个函数应用于数据中的每一个组,我们需要首先根据可用的类对数据进行分组。dplyr包中的group_by()方法将数据分为不同的部分。它的语法如下。

语法:group_by(col1, col2…)

参数 :

  • col1, col2,… – 要对数据进行分组的列

方法1:使用mutate方法

R中的 mutate()方法 使用管道操作符在提供的数据中创建新的列。mutate()方法被用来计算所提供的聚合函数。

语法: mutate(new-col-name = func)

参数:

  • new-col-name – 要添加到tibble中的新列
  • func – 要在指定的数据帧上应用的函数。

下面的代码片断说明了这样一个过程:tibble中的数据根据col x中的值被分成几组,然后计算y col值的总和并按组返回。

在这个例子中,行号1、5和9对应于’x’列中的值2。y “列中的值分别为1、5和9。这些值的总和是15,在输出的tibble中被返回。在x列中对应于2的每一行,在sum_group_y列中显示15。

# Importing dplyr package
library(dplyr)
  
# Creating a tibble in R
data = tibble(
  x = c(2,4,5,6,2,5,6,6,2,6), 
  y = 1:10)
print("Data")
print(data)
  
# Grouping the data by x and 
# then computing the group wise 
# sum using y column
data %>% group_by(x) %>% 
 mutate(sum_group_y = sum(y))

输出

# A tibble: 10 x 2
       x     y
   <dbl> <int>
 1     2     1
 2     4     2
 3     5     3
 4     6     4
 5     2     5
 6     5     6
 7     6     7
 8     6     8
 9     2     9
10     6    10
# A tibble: 10 x 3
# Groups:   x [4]
       x     y sum_group_y
   <dbl> <int>       <int>
 1     2     1          15
 2     4     2           2
 3     5     3           9
 4     6     4          29
 5     2     5          15
 6     5     6           9
 7     6     7          29
 8     6     8          29
 9     2     9          15
10     6    10          29

方法2:使用group_map方法

group_map()方法也可以对tibble中的每个组应用一个函数。该方法返回相当于返回组数的tibble数量。它的语法如下:

语法: group_map(.data, .f, …, .keep = FALSE)

参数 :

  • .data – 一个分组的tibble
  • . f – 要应用的函数

下面的代码片段说明了group_map()方法在分组的tibble上的用法,其中用户定义的条目是基于列x值分组的。根据每个tibble分组值计算出列y值的总和。声明并定义了一个用户定义的sum_y函数,它将输出作为输入向量值的总和。

# Importing dplyr
library(dplyr)
  
# Creating a tibble
data = tibble(
  x = c(2,4,5,6,2,5,6,6,2,6), 
  y = 1:10)
print("Data")
print(data)
  
sum_y = function(vector) {
  return(tibble::tibble(sum = sum(vector)))
}
  
# Grouping the data by x and 
# then computing the group wise
# sum using y column
data %>%
  group_by(x) %>%
  group_map(~sum_y(.x$y))

输出

[1] "Data"
> print(data)
# A tibble: 10 × 2
       x     y
   <dbl> <int>
 1     2     1
 2     4     2
 3     5     3
 4     6     4
 5     2     5
 6     5     6
 7     6     7
 8     6     8
 9     2     9
10     6    10

[[1]]
# A tibble: 1 x 1
    sum
  <int>
1    15

[[2]]
# A tibble: 1 x 1
    sum
  <int>
1     2

[[3]]
# A tibble: 1 x 1
    sum
  <int>
1     9

[[4]]
# A tibble: 1 x 1
    sum
  <int>
1    29

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程