R[week5] Customer Lifetime Value code

R: 4.3.2 (2023-10-31) R studio: 2023.12.1+402 (2023.12.1+402)

Customer Lifetime Value (CLV)

The Marketing Problem

我们需要了解我们的客户,或者知道某个特定的客户是否与我们的组织相关。因此:

  • 我们想知道客户为组织创造了多少价值。
  • 我们想知道生成的价值将如何演变。
  • 我们希望根据价值对客户进行细分。 这样我们就可以针对不同的客户群体执行特定的操作。

Customer Lifetime Value (CLV)

解决业务问题的技术是理解客户的价值。我们有很多方法来了解客户的价值。其中最相关的之一是客户生命周期价值(CLV)。

创建一个仅包含固定酸度大于或等于8的葡萄酒的数据框。 创建一个仅包含品质为7的葡萄酒的数据框。 创建一个仅包含2列(pH和品质)的数据框。 创建一个仅包含2列(pH和品质)的数据框,其中葡萄酒按照pH的升序排序。 创建一个仅包含2列(pH和品质)的数据框,其中葡萄酒按照品质的降序排序。 创建一个仅包含没有柠檬酸的葡萄酒的数据框,并按照品质的降序排序。 创建一个红葡萄酒数据集的版本,其中包含一个额外的列,该列包含酒精含量乘以密度。 创建一个总结红葡萄酒数据集中每个变量的数据框。CLV 是企业与客户整个关系中获得的所有价值的预测。所有客户生成的价值称为客户权益,用于评估公司。

主要概念。影响客户价值的因素很多,在 CLV 计算中必须考虑其中的一些:

  • 现金流:客户与组织的关系期间对组织产生的收入的净现值。
  • 生命周期:与组织的关系持续的时间。
  • 维护成本:确保每位客户的收入流量的相关成本。
  • 风险成本:与客户相关的风险。
  • 获取成本:获取新客户所需的成本和努力。
  • 保留成本:保留新客户所需的成本和努力。
  • 推荐价值:客户在其影响范围内对公司收入的推荐影响。
  • 细分改进:客户信息在改进客户细分模型中的价值。

CLV

$$ CLV = \sum_{t=0}^{T} \frac{(p_t - c_t) r_t}{(1 + i)^t} - AC $$

其中,

  • $p_t$ 表示时间 $t$ 客户支付的价格,
  • $c_t$ 表示时间 $t$ 的客户服务直接成本,
  • $i$ 表示公司的折现率或资金成本。
  • $r$ 表示客户在时间 $t$ 返回购买或保持活跃的概率,
  • $AC$ 表示获取客户的成本,
  • $T$ 表示用于估算客户生命周期价值(CLV)的时间范围。

A simplification

让我们假设 $ p $ 和 $ c $ 是常数值,而 $ r $ 是随时间递减的函数,那么公式如下所示:

$$ CLV = \sum_{t=0}^{\infty} \frac{m \cdot r^t}{(1 + i)^t} - AC = m \cdot \left( \frac{r}{1 + i - r} \right) - AC $$

其中,$ p - c = m $ 表示利润,$ r $ 表示保留率,$ i $ 表示折现率。

最终考虑:

  • 通常,我们会为公式中的每个概念拥有一个数据集。
  • 我们需要估计其余的数值。
  • 因此,重要的是要记住:我们对未来的预测能力受到我们过去经验的限制。

Implementation Process and Use Cases

实施过程如下所示:

  • 讨论 CLV 是否适合作为我们业务的指标
  • 辨别和理解数据源和元数据
  • 提取、转换、清理和加载数据
  • 选择 CLV 方法
  • 分析结果并调整参数
  • 展示并解释结果

CLV常用于:

  • 基于CLV制定市场战略
  • 基于CLV的客户细分
  • 跨段落进行预测和客户演变分析
  • 基于CLV创建不同的沟通、服务和忠诚计划
  • 唤醒“非活跃”客户
  • 估算公司的价值(在收购情况下,例如初创公司)

ARPU/ARPA as CLV approximation

平均用户收入(ARPU)或平均账户收入(ARPA)可用于计算历史CLV。 过程如下:

  • 计算每位客户每月的平均收入(即总收入/客户加入的月份数)
  • 将它们相加
  • 乘以12或24以获得一年或两年的CLV。

练习:假设Josep和Laura是您唯一的客户,他们的购买情况如下:

Customer NamePurchase DateAmount
JosepJan 1, 2023$150
JosepMay 1, 2023$45
JosepMay 15, 2023$50
LauraJun 15, 2023$100
LauraJun 15, 2023$75
LauraJun 30, 2023$100

假设今天是2023年7月1日。

Josep的平均每月收入是 (150 + 50 + 100) / 6 = 50,

Laura的平均每月收入是 (45 + 75 + 100) / 2 = 110。

将这两个数字相加,得到每位客户的平均月收入为 160 / 2 = 80。要找到12个月或24个月的CLV,将该数字乘以12或24。

ARPU方法的好处是计算简单,但它没有考虑到客户行为的变化。

How to implement CLV in R

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> CLV.df <- read_excel("Data_CLV.xlsx", sheet = "Ex2") 
                                                                                          
> CLV.df
## A tibble: 7 × 6
      t active     p     c     i     r
  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1    200   375    20  0.01 0.91 
2     2    165   375    20  0.01 0.825
3     3    150   375    20  0.01 0.75 
4     4    176   375    20  0.01 0.88 
5     5    178   375    20  0.01 0.89 
6     6    150   375    20  0.01 0.75 
7     7    135   375    20  0.01 0.675
  • t:表示时间,通常表示观察期的长度或预测的时间段。它可以以天、月、年等为单位。

  • active:表示客户是否活跃。在 CLV 模型中,通常将客户分为活跃客户和不活跃客户,根据他们在观察期内的购买行为或者活动频率进行分类。

  • p:表示客户购买或者消费的总额。它是客户在观察期内购买的产品或服务的总额度,也称为客户价值。

  • c:表示客户获取或者留存的成本。这包括了获取新客户的营销成本、维护现有客户的成本以及服务客户的成本等。

  • i:表示折现率或贴现率。在 CLV 模型中,通常使用折现率来考虑时间价值的概念,即未来收入的现值。

  • r:表示留存率。它是指客户在一段时间内继续购买产品或服务的概率,通常作为客户流失的相反概率。

Exploratory Data Analysis

1
2
3
4
5
6
7
8
> summary(CLV.df)
       t           active            p             c            i              r         
 Min.   :1.0   Min.   :135.0   Min.   :375   Min.   :20   Min.   :0.01   Min.   :0.6750  
 1st Qu.:2.5   1st Qu.:150.0   1st Qu.:375   1st Qu.:20   1st Qu.:0.01   1st Qu.:0.7500  
 Median :4.0   Median :165.0   Median :375   Median :20   Median :0.01   Median :0.8250  
 Mean   :4.0   Mean   :164.9   Mean   :375   Mean   :20   Mean   :0.01   Mean   :0.8114  
 3rd Qu.:5.5   3rd Qu.:177.0   3rd Qu.:375   3rd Qu.:20   3rd Qu.:0.01   3rd Qu.:0.8850  
 Max.   :7.0   Max.   :200.0   Max.   :375   Max.   :20   Max.   :0.01   Max.   :0.9100

摘要显示价格和成本是恒定的。活跃客户的范围是[135,200]。保留率的范围是[0.83,1.11]。

客户演变。我们可以创建一条折线图来了解客户数量的变化情况。 ggplot() 用于构建初始绘图对象,并几乎总是紧跟着 + 添加组件到图中。

Active Customer Evolution

1
2
3
ggplot(CLV.df, aes(x = t, y = active)) +
  geom_line() + ylab("Customer") +
  xlab("Period") + ggtitle("Active Customer Evolution")

Retention Ratio Evolution

1
2
ggplot(CLV.df, aes(x = t, y = r)) + geom_line() + ylab("Customer") + xlab("Period") +
  ggtitle("Retention Ratio Evolution")

问题:我们观察到了什么?由于一些变量是恒定的,CLV只取决于客户数量。图表与之前的类似。

Calculate CLV

现在,我们可以计算(历史)CLV。首先,我们创建一个新的列,其中包含每个时期的CLV:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> CLV.df$CLV <- (CLV.df$p-CLV.df$c)*CLV.df$r^CLV.df$t/(1+CLV.df$i)^CLV.df$t 

> CLV.df
## A tibble: 7 × 7
      t active     p     c     i     r   CLV
  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1    200   375    20  0.01 0.91  320. 
2     2    165   375    20  0.01 0.825 237. 
3     3    150   375    20  0.01 0.75  145. 
4     4    176   375    20  0.01 0.88  205. 
5     5    178   375    20  0.01 0.89  189. 
6     6    150   375    20  0.01 0.75   59.5
7     7    135   375    20  0.01 0.675  21.1

CLV演变。现在我们创建一个图表来看看CLV的变化:

1
ggplot(CLV.df, aes(x = t, y = CLV)) + geom_line() + ggtitle("CLV evolution") + ylab("CLV") + xlab("Period")

CLV evolution

问题:我们观察到了什么?由于一些变量是恒定的,CLV只取决于客户数量。图表与之前的类似。

1
2
3
4
5
> CLV <- apply(CLV.df, 2, sum) 

> CLV[7]
     CLV 
1175.932

问题:这个值代表什么意思?CLV值代表了客户的生命周期价值,即客户在其与公司的整个关系中为公司带来的预期收益总和。这个值可以帮助公司评估客户的重要性,并为营销策略和资源分配提供指导。

Exercise:

如果保留率恒定为0.80会发生什么呢?

  • 解决方案

首先,我们可以添加一个新的列:

1
CLV.df$CLV2 <- (CLV.df$p - CLV.df$c) * 0.8 / (1 + CLV.df$i)^(CLV.df$t - 1)

然后,我们可以创建一个新的图表:

1
ggplot(CLV.df, aes(x = t, y = CLV2)) + geom_line() + ylab("CLV2") + xlab("Period") + labs(title = "CLV 2 Evolution")

最后,我们可以计算CLV值:

1
2
3
4
5
6
7
8
9
> CLV <- apply(CLV.df, 2, sum) 

> CLV[7]
     CLV 
1175.932 

> CLV[8]
    CLV2 
1929.915 

CLV[7] 代表了我们在分析中所考虑的时间段内的 CLV 值,通常表示了一个时间段的结束。例如,如果我们在分析中考虑的是过去一年的数据,则 CLV[7] 就表示了过去一年的客户生命周期价值。

CLV[8] 则代表了在 CLV[7] 时间段之后的 CLV 值,通常表示了一个新的时间段的开始。例如,如果我们想要预测未来一年的客户生命周期价值,则 CLV[8] 就表示了未来一年的预期 CLV 值。

2 Data Manipulation

需要安装dplyr包。获取dplyr的最简单方法是安装tidyverse:install.packages("tidyverse")。 tidyverse是一组设计用于数据科学的R包。所有的包都共享一个基础设计理念、语法和数据结构。核心tidyverse包括以下几个:

  • ggplot2是一个用于声明性创建图形的系统。
  • dplyr提供数据操作的语法,提供一组一致的动词,解决最常见的数据操作挑战。
  • tidyr提供了一组函数,帮助您将数据整理成整洁的形式。整洁的数据是具有一致形式的数据:简言之,每个变量都放在一列中,每列都是一个变量。
  • readr提供了一种快速友好的方式来读取矩形数据(例如csv、tsv和fwf)
  • stringr提供了一组连贯的函数,旨在使处理字符串变得尽可能简单。
  • forcats提供了一组有用的工具,解决了因子(分类变量)的常见问题
  • purr
  • tibble

或者,只安装dplyr:install.packages("dplyr", dependencies=TRUE)。Dependencies = TRUE将安装此包所需的依赖项。

让我们加载包和数据集。mtcars数据集随dplyr包一起提供。我们可以使用这些包来探索数据。

mtcars

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
> head(mtcars) 
                   mpg cyl disp  hp drat    wt  qsec vs am gear
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3
                  carb
Mazda RX4            4
Mazda RX4 Wag        4
Datsun 710           1
Hornet 4 Drive       1
Hornet Sportabout    2
Valiant              1

> str(mtcars)
'data.frame':	32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Manipulate cases

  • filter() 函数根据其值选择案例。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
> filter(mtcars, gear == 4) # 过滤器可与所有标准逻辑运算符一起使用
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

> filter(mtcars, gear == 3 | gear == 4) # 即 >、<、=>、<=、!=、==
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

> filter(mtcars, mpg > 21)
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
  • arrange() 函数按照选定列的值对数据框的行进行排序。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
> arrange(mtcars, gear)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

> arrange(mtcars, gear, mpg)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2

> arrange(mtcars, desc(mpg)) # desc 以降序排序
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4

Manipulate variables

  • select() 函数根据变量名选择变量。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
> select(mtcars, gear, mpg, hp)
                    gear  mpg  hp
Mazda RX4              4 21.0 110
Mazda RX4 Wag          4 21.0 110
Datsun 710             4 22.8  93
Hornet 4 Drive         3 21.4 110
Hornet Sportabout      3 18.7 175
Valiant                3 18.1 105
Duster 360             3 14.3 245
Merc 240D              4 24.4  62
Merc 230               4 22.8  95
Merc 280               4 19.2 123
Merc 280C              4 17.8 123
Merc 450SE             3 16.4 180
Merc 450SL             3 17.3 180
Merc 450SLC            3 15.2 180
Cadillac Fleetwood     3 10.4 205
Lincoln Continental    3 10.4 215
Chrysler Imperial      3 14.7 230
Fiat 128               4 32.4  66
Honda Civic            4 30.4  52
Toyota Corolla         4 33.9  65
Toyota Corona          3 21.5  97
Dodge Challenger       3 15.5 150
AMC Javelin            3 15.2 150
Camaro Z28             3 13.3 245
Pontiac Firebird       3 19.2 175
Fiat X1-9              4 27.3  66
Porsche 914-2          5 26.0  91
Lotus Europa           5 30.4 113
Ford Pantera L         5 15.8 264
Ferrari Dino           5 19.7 175
Maserati Bora          5 15.0 335
Volvo 142E             4 21.4 109

> select(mtcars, -drat) # - 符号表示删除变量/列
                     mpg cyl  disp  hp    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 2.780 18.60  1  1    4    2
  • slice() 函数根据行号选择特定的行。
1
2
3
4
5
> slice(mtcars, 1:3)
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
  • sample_n() 和 sample_frac() 函数选择随机行:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> sample_n(mtcars, 5) # 选择的行数
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1

> sample_frac(mtcars, .1) # 选择的行数占总行数的比例
                mpg cyl  disp hp drat    wt qsec vs am gear carb
Merc 230       22.8   4 140.8 95 3.92 3.150 22.9  1  0    4    2
Merc 240D      24.4   4 146.7 62 3.69 3.190 20.0  1  0    4    2
Toyota Corolla 33.9   4  71.1 65 4.22 1.835 19.9  1  1    4    1
  • mutate() 函数添加新变量,这些变量是现有变量的函数。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
> mutate(mtcars, wt_mpg = wt * mpg)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb  wt_mpg
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 55.0200
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 60.3750
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1 52.8960
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 68.8010
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 64.3280
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 62.6260
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 51.0510
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 77.8360
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2 71.8200
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4 66.0480
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4 61.2320
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3 66.7480
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3 64.5290
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3 57.4560
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4 54.6000
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4 56.4096
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4 78.5715
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1 71.2800
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2 49.0960
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1 62.2065
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1 52.9975
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2 54.5600
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2 52.2120
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4 51.0720
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2 73.8240
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1 52.8255
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2 55.6400
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2 45.9952
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4 50.0860
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6 54.5690
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8 53.5500
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2 59.4920

> mutate(mtcars, mpg_mean = mean(mpg), mpg_diff_mean = mpg - mpg_mean)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb mpg_mean mpg_diff_mean
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 20.09062      0.909375
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 20.09062      0.909375
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1 20.09062      2.709375
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 20.09062      1.309375
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 20.09062     -1.390625
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 20.09062     -1.990625
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 20.09062     -5.790625
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 20.09062      4.309375
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2 20.09062      2.709375
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4 20.09062     -0.890625
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4 20.09062     -2.290625
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3 20.09062     -3.690625
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3 20.09062     -2.790625
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3 20.09062     -4.890625
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4 20.09062     -9.690625
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4 20.09062     -9.690625
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4 20.09062     -5.390625
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1 20.09062     12.309375
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2 20.09062     10.309375
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1 20.09062     13.809375
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1 20.09062      1.409375
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2 20.09062     -4.590625
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2 20.09062     -4.890625
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4 20.09062     -6.790625
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2 20.09062     -0.890625
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1 20.09062      7.209375
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2 20.09062      5.909375
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2 20.09062     10.309375
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4 20.09062     -4.290625
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6 20.09062     -0.390625
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8 20.09062     -5.090625
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2 20.09062      1.309375

> mutate(mtcars, mpg_mean_diff = mpg - mean(mpg))
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb mpg_mean_diff
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4      0.909375
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4      0.909375
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1      2.709375
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1      1.309375
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2     -1.390625
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1     -1.990625
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4     -5.790625
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2      4.309375
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2      2.709375
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4     -0.890625
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4     -2.290625
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3     -3.690625
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3     -2.790625
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3     -4.890625
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4     -9.690625
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4     -9.690625
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4     -5.390625
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1     12.309375
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2     10.309375
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1     13.809375
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1      1.409375
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2     -4.590625
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2     -4.890625
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4     -6.790625
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2     -0.890625
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1      7.209375
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2      5.909375
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2     10.309375
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4     -4.290625
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6     -0.390625
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8     -5.090625
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2      1.309375

Summarise cases

summarise() 函数创建一个新的数据框。它将有一行总结所有观察结果,并包含每个您指定的摘要统计量的一个列。如果有分组变量,它将为每个分组变量的组合创建一行。

1
2
3
4
5
6
7
> summarise(mtcars, sd(disp))
  sd(disp)
1 123.9387

> summarise(mtcars, median(mpg), mean(mpg), max(mpg), min(mpg))
  median(mpg) mean(mpg) max(mpg) min(mpg)
1        19.2  20.09062     33.9     10.4

Group cases

使用 group_by() 函数创建表的一个“分组”副本。dplyr函数将分别处理每个“组”,然后将结果组合起来。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
> group_by(mtcars, cyl)
## A tibble: 32 × 11
## Groups:   cyl [3]
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
## ℹ 22 more rows
## ℹ Use `print(n = ...)` to see more rows

管道操作符 %>%

允许您将一个函数的输出直接发送到下一个函数的输入。使用管道操作符时,请记住以下几点:

  1. 第一个参数始终是一个数据框。
  2. 后续参数指定对数据框要执行的操作。
  3. 参数的顺序将返回一个新的数据框(除非您通过分配操作(如使用“<-”)对第一个参数中的数据框进行了更改)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
> mtcars %>% # take dataframe, then
+   group_by(gear) %>% # group it by gear, then
+   summarise(mean(mpg)) # summarise the mean mpg for each level o .... [TRUNCATED] 
## A tibble: 3 × 2
   gear `mean(mpg)`
  <dbl>       <dbl>
1     3        16.1
2     4        24.5
3     5        21.4

> mtcars %>%
+   filter(mpg > 21) %>% select(gear, mpg, hp) %>% arrange(gear)
               gear  mpg  hp
Hornet 4 Drive    3 21.4 110
Toyota Corona     3 21.5  97
Datsun 710        4 22.8  93
Merc 240D         4 24.4  62
Merc 230          4 22.8  95
Fiat 128          4 32.4  66
Honda Civic       4 30.4  52
Toyota Corolla    4 33.9  65
Fiat X1-9         4 27.3  66
Volvo 142E        4 21.4 109
Porsche 914-2     5 26.0  91
Lotus Europa      5 30.4 113

如果您想要使用这个较小版本的数据创建一个新的对象,可以通过为它指定一个新名称来实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
> mtcars_mpg <- mtcars %>% filter(mpg > 21) %>% select(gear, mpg, hp) %>% arrange(gear)

> mtcars_mpg
               gear  mpg  hp
Hornet 4 Drive    3 21.4 110
Toyota Corona     3 21.5  97
Datsun 710        4 22.8  93
Merc 240D         4 24.4  62
Merc 230          4 22.8  95
Fiat 128          4 32.4  66
Honda Civic       4 30.4  52
Toyota Corolla    4 33.9  65
Fiat X1-9         4 27.3  66
Volvo 142E        4 21.4 109
Porsche 914-2     5 26.0  91
Lotus Europa      5 30.4 113

Excercise

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> redwine <- read.csv("Data_redwine.csv", header=TRUE) 

> head(redwine)
  fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol quality
1           7.4             0.70        0.00            1.9     0.076                  11                   34  0.9978 3.51      0.56     9.4       5
2           7.8             0.88        0.00            2.6     0.098                  25                   67  0.9968 3.20      0.68     9.8       5
3           7.8             0.76        0.04            2.3     0.092                  15                   54  0.9970 3.26      0.65     9.8       5
4          11.2             0.28        0.56            1.9     0.075                  17                   60  0.9980 3.16      0.58     9.8       6
5           7.4             0.70        0.00            1.9     0.076                  11                   34  0.9978 3.51      0.56     9.4       5
6           7.4             0.66        0.00            1.8     0.075                  13                   40  0.9978 3.51      0.56     9.4       5
  1. 创建一个仅包含固定酸度大于或等于8的葡萄酒的数据框。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> wines_fixed_acidity_8_or_greater <- redwine %>%
+   filter(fixed.acidity >= 8)

> wines_fixed_acidity_8_or_greater
   fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol quality
1           11.2            0.280        0.56            1.9     0.075                  17                   60 0.99800 3.16      0.58     9.8       6
2            8.9            0.620        0.18            3.8     0.176                  52                  145 0.99860 3.16      0.88     9.2       5
3            8.9            0.620        0.19            3.9     0.170                  51                  148 0.99860 3.17      0.93     9.2       5
4            8.5            0.280        0.56            1.8     0.092                  35                  103 0.99690 3.30      0.75    10.5       7
5            8.1            0.560        0.28            1.7     0.368                  16                   56 0.99680 3.11      1.28     9.3       5
6            8.9            0.220        0.48            1.8     0.077                  29                   60 0.99680 3.39      0.53     9.4       6
7            8.5            0.490        0.11            2.3     0.084                   9                   67 0.99680 3.17      0.53     9.4       5
8            8.3            0.655        0.12            2.3     0.083                  15                  113 0.99660 3.17      0.66     9.8       5
3          12.0            0.380        0.56            2.1     0.093                   6                   24 0.99925 3.14      0.71    10.9       6
  1. 创建一个仅包含品质为7的葡萄酒的数据框。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> # 使用filter函数筛选品质为7的葡萄酒
> redwine_quality_7 <- redwine %>% 
+   filter(quality == 7)

> # 显示新数据框的前几行
> head(redwine_quality_7)
  fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol quality
1           7.3             0.65        0.00            1.2     0.065                  15                   21  0.9946 3.39      0.47    10.0       7
2           7.8             0.58        0.02            2.0     0.073                   9                   18  0.9968 3.36      0.57     9.5       7
3           8.5             0.28        0.56            1.8     0.092                  35                  103  0.9969 3.30      0.75    10.5       7
4           8.1             0.38        0.28            2.1     0.066                  13                   30  0.9968 3.23      0.73     9.7       7
5           7.5             0.52        0.16            1.9     0.085                  12                   35  0.9968 3.38      0.62     9.5       7
6           8.0             0.59        0.16            1.8     0.065                   3                   16  0.9962 3.42      0.92    10.5       7
  1. 创建一个仅包含2列(pH和品质)的数据框。
1
2
3
4
5
6
## 使用select函数选择指定的两列
redwine_selected_columns <- redwine %>% 
  select(pH, quality)

## 显示新数据框的前几行
head(redwine_selected_columns)
  1. 创建一个仅包含2列(pH和品质)的数据框,其中葡萄酒按照pH的升序排序。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> # 使用select函数选择指定的两列,然后使用arrange函数按照pH的升序排序
> redwine_selected_and_sorted <- redwine %>% 
+   select(pH, quality) %>%
+   arrange(pH)

> # 显示新数据框的前几行
> head(redwine_selected_and_sorted)
    pH quality
1 2.74       4
2 2.86       6
3 2.87       6
4 2.88       8
5 2.89       5
6 2.89       5
  1. 创建一个仅包含2列(pH和品质)的数据框,其中葡萄酒按照品质的降序排序。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> # 使用select函数选择指定的两列,然后使用arrange函数按照品质的降序排序
> redwine_selected_and_sorted <- redwine %>% 
+   select(pH, quality) %>%
+   arrange(desc(quality))

> # 显示新数据框的前几行
> head(redwine_selected_and_sorted)
    pH quality
1 3.35       8
2 3.23       8
3 3.56       8
4 2.88       8
5 3.22       8
6 3.15       8
  1. 创建一个仅包含没有柠檬酸的葡萄酒的数据框,并按照品质的降序排序。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> # 使用filter函数筛选没有柠檬酸的葡萄酒,然后使用arrange函数按照品质的降序排序
> redwine_no_citric_acid <- redwine %>% 
+   filter(citric.acid == 0) %>%
+   arrange(desc(quality))

> # 显示新数据框的前几行
> head(redwine_no_citric_acid)
  fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol quality
1           7.3            0.650           0            1.2     0.065                  15                   21 0.99460 3.39      0.47    10.0       7
2           5.1            0.585           0            1.7     0.044                  14                   86 0.99264 3.56      0.94    12.9       7
3           4.9            0.420           0            2.1     0.048                  16                   42 0.99154 3.71      0.74    14.0       7
4           5.6            0.660           0            2.2     0.087                   3                   11 0.99378 3.71      0.63    12.8       7
5           5.6            0.660           0            2.2     0.087                   3                   11 0.99378 3.71      0.63    12.8       7
6           7.8            0.645           0            2.0     0.082                   8                   16 0.99640 3.38      0.59     9.8       6
  1. 创建一个红葡萄酒数据集的版本,其中包含一个额外的列,该列包含酒精含量乘以密度。
1
2
3
4
5
6
## 使用mutate函数创建一个新列,该列为酒精含量乘以密度
redwine_with_extra_column <- redwine %>% 
  mutate(alcohol_density = alcohol * density)

## 显示新数据框的前几行
head(redwine_with_extra_column)
  1. 创建一个总结红葡萄酒数据集中每个变量的数据框。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
> # 使用summary函数对红葡萄酒数据集进行总结
> redwine_summary <- summary(redwine)

> # 显示总结结果
> redwine_summary
 fixed.acidity    volatile.acidity  citric.acid     residual.sugar     chlorides       free.sulfur.dioxide total.sulfur.dioxide    density             pH          sulphates         alcohol         quality     
 Min.   : 4.600   Min.   :0.1200   Min.   :0.0000   Min.   : 1.200   Min.   :0.01200   Min.   : 1.00       Min.   :  6.00       Min.   :0.9906   Min.   :2.740   Min.   :0.3300   Min.   : 8.40   Min.   :3.000  
 1st Qu.: 7.400   1st Qu.:0.4000   1st Qu.:0.1200   1st Qu.: 2.000   1st Qu.:0.07200   1st Qu.: 7.00       1st Qu.: 23.00       1st Qu.:0.9964   1st Qu.:3.190   1st Qu.:0.5600   1st Qu.: 9.50   1st Qu.:5.000  
 Median : 8.300   Median :0.5200   Median :0.2800   Median : 2.300   Median :0.08100   Median :13.00       Median : 39.00       Median :0.9973   Median :3.300   Median :0.6200   Median : 9.90   Median :5.000  
 Mean   : 8.729   Mean   :0.5283   Mean   :0.2946   Mean   : 2.579   Mean   :0.09037   Mean   :15.17       Mean   : 48.33       Mean   :0.9973   Mean   :3.299   Mean   :0.6685   Mean   :10.24   Mean   :5.594  
 3rd Qu.: 9.800   3rd Qu.:0.6350   3rd Qu.:0.4700   3rd Qu.: 2.700   3rd Qu.:0.09300   3rd Qu.:20.25       3rd Qu.: 64.25       3rd Qu.:0.9984   3rd Qu.:3.400   3rd Qu.:0.7400   3rd Qu.:10.80   3rd Qu.:6.000  
 Max.   :15.900   Max.   :1.3300   Max.   :1.0000   Max.   :15.500   Max.   :0.61100   Max.   :68.00       Max.   :165.00       Max.   :1.0032   Max.   :3.900   Max.   :2.0000   Max.   :14.90   Max.   :8.000 

Code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
library("readxl") # used for report compilation and table display 
library("ggplot2") # confusion matrix
library("dplyr") # confusion matrix

## 获取当前已加载文件的目录
file_dir <- dirname(parent.frame(2)$ofile)
print(file_dir)
## 将工作目录设置为当前已加载文件的目录
setwd(file_dir)

CLV.df <- read_excel("Data_CLV.xlsx", sheet = "Ex2") 
CLV.df

summary(CLV.df)

ggplot(CLV.df, aes(x = t, y = active)) +
  geom_line() + ylab("Customer") +
  xlab("Period") + ggtitle("Active Customer Evolution")

ggplot(CLV.df, aes(x = t, y = r)) + geom_line() + ylab("Customer") + xlab("Period") +
  ggtitle("Retention Ratio Evolution")

CLV.df$CLV <- (CLV.df$p-CLV.df$c)*CLV.df$r^CLV.df$t/(1+CLV.df$i)^CLV.df$t 
CLV.df

ggplot(CLV.df, aes(x = t, y = CLV)) + geom_line() + ggtitle("CLV evolution") + ylab("CLV") + xlab("Period")

CLV <- apply(CLV.df, 2, sum) 
CLV[7]

CLV.df$CLV2 <- (CLV.df$p - CLV.df$c) * 0.8 / (1 + CLV.df$i)^(CLV.df$t - 1)

ggplot(CLV.df, aes(x = t, y = CLV2)) + geom_line() + ylab("CLV2") + xlab("Period") + labs(title = "CLV 2 Evolution")

CLV <- apply(CLV.df, 2, sum) 
CLV[7]
CLV[8]

head(mtcars) 

str(mtcars)

filter(mtcars, gear == 4) # 过滤器可与所有标准逻辑运算符一起使用
filter(mtcars, gear == 3 | gear == 4) # 即 >、<、=>、<=、!=、==
filter(mtcars, mpg > 21)

arrange(mtcars, gear)
arrange(mtcars, gear, mpg)
arrange(mtcars, desc(mpg)) # desc 以降序排序

select(mtcars, gear, mpg, hp)
select(mtcars, -drat) # - 符号表示删除变量/列

slice(mtcars, 1:3)

sample_n(mtcars, 5) # 选择的行数
sample_frac(mtcars, .1) # 选择的行数占总行数的比例

mutate(mtcars, wt_mpg = wt * mpg)
mutate(mtcars, mpg_mean = mean(mpg), mpg_diff_mean = mpg - mpg_mean)
mutate(mtcars, mpg_mean_diff = mpg - mean(mpg))

summarise(mtcars, sd(disp))
summarise(mtcars, median(mpg), mean(mpg), max(mpg), min(mpg))

group_by(mtcars, cyl)

mtcars %>% # take dataframe, then
  group_by(gear) %>% # group it by gear, then
  summarise(mean(mpg)) # summarise the mean mpg for each level of gear

mtcars %>%
  filter(mpg > 21) %>% select(gear, mpg, hp) %>% arrange(gear)

mtcars_mpg <- mtcars %>% filter(mpg > 21) %>% select(gear, mpg, hp) %>% arrange(gear)
mtcars_mpg

## Excercise
redwine <- read.csv("Data_redwine.csv", header=TRUE) 
head(redwine)

wines_fixed_acidity_8_or_greater <- redwine %>%
  filter(fixed.acidity >= 8)

wines_fixed_acidity_8_or_greater

## 使用filter函数筛选品质为7的葡萄酒
redwine_quality_7 <- redwine %>% 
  filter(quality == 7)

## 显示新数据框的前几行
head(redwine_quality_7)

## 使用select函数选择指定的两列,然后使用arrange函数按照pH的升序排序
redwine_selected_and_sorted <- redwine %>% 
  select(pH, quality) %>%
  arrange(pH)

## 显示新数据框的前几行
head(redwine_selected_and_sorted)

## 使用select函数选择指定的两列,然后使用arrange函数按照品质的降序排序
redwine_selected_and_sorted <- redwine %>% 
  select(pH, quality) %>%
  arrange(desc(quality))

## 显示新数据框的前几行
head(redwine_selected_and_sorted)

## 使用filter函数筛选没有柠檬酸的葡萄酒,然后使用arrange函数按照品质的降序排序
redwine_no_citric_acid <- redwine %>% 
  filter(citric.acid == 0) %>%
  arrange(desc(quality))

## 显示新数据框的前几行
head(redwine_no_citric_acid)

## 使用summary函数对红葡萄酒数据集进行总结
redwine_summary <- summary(redwine)

## 显示总结结果
redwine_summary
comments powered by Disqus