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 Name | Purchase Date | Amount |
|---|
| Josep | Jan 1, 2023 | $150 |
| Josep | May 1, 2023 | $45 |
| Josep | May 15, 2023 | $50 |
| Laura | Jun 15, 2023 | $100 |
| Laura | Jun 15, 2023 | $75 |
| Laura | Jun 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
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
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
|
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
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
|
- 创建一个仅包含固定酸度大于或等于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
|
- 创建一个仅包含品质为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
|
- 创建一个仅包含2列(pH和品质)的数据框。
1
2
3
4
5
6
| ## 使用select函数选择指定的两列
redwine_selected_columns <- redwine %>%
select(pH, quality)
## 显示新数据框的前几行
head(redwine_selected_columns)
|
- 创建一个仅包含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
|
- 创建一个仅包含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
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
2
3
4
5
6
| ## 使用mutate函数创建一个新列,该列为酒精含量乘以密度
redwine_with_extra_column <- redwine %>%
mutate(alcohol_density = alcohol * density)
## 显示新数据框的前几行
head(redwine_with_extra_column)
|
- 创建一个总结红葡萄酒数据集中每个变量的数据框。
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
|