# R&Python Data Science 系列：数据处理（2）

1 衍生字段函数

python实现

```from dfply import *
import numpy as np
import pandas as pd
##新增列x+y、x*y*z,mutate（）函数
diamonds >> mutate(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5)

##新增列x+y、x*y*z,transmute（）函数
diamonds >> transmute(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5)```

R语言实现

```library(dplyr)
library(ggplot2)
library(tidyr)
##新增列x+y、x*y*z,mutate（）函数
diamonds %>% mutate(x_plus_y = x + y, xyz = x*y*z) %>% head(5)

##新增列x+y、x*y*z,transmute（）函数
diamonds %>% transmute(x_plus_y = x + y, xyz = x*y*z) %>% head(5)```

2 条件函数

2.1 if_else函数

Python实现

```##如果钻石价格大于2000，则钻石等级为A,其他为A-
diamonds >> mutate(price_class = if_else(X.price > 2000, 'A', 'A-')) >> distinct(X.price_class)```

```##如果钻石价格大于2000，则钻石等级为A,1500-2000为A-, 1500以下为A--
(diamonds >>
mutate(price_class = if_else(X.price > 2000, 'A', if_else(X.price > 1500,'A-', 'A--'))) >>
distinct(X.price_class) >>
select(X.price_class))```

R语言实现

```##如果钻石价格大于2000，则钻石等级为A,其他为A-
diamonds %>%
mutate(price_class = if_else(price > 2000, 'A', 'A-')) %>%
distinct(price_class)

##如果钻石价格大于2000，则钻石等级为A,1500-2000为A-, 1500以下为A--
diamonds %>%
mutate(price_class = if_else(price > 2000, 'A', if_else(price > 1500,'A-', 'A--'))) %>%
distinct(price_class)```

2.2 case_when函数

python实现

```##如果钻石价格大于2000，则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D
(diamonds >>
mutate(price_class = case_when([X.price > 2000, 'A'],
[X.price > 1500 , 'B'],
[X.price > 1000, 'C'],
[True, 'D'])) >>
distinct(X.price_class) >>
select(X.price_class))```

R语言实现

```##如果钻石价格大于2000，则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D
diamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A',
price > 1500 ~ 'B',
price > 1000 ~ 'C',
TRUE ~ 'D')) %>%
distinct(price_class)```

2.3 between函数

python实现

```##如果钻石价格大于2000，则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D
(diamonds >>
mutate(price_class = case_when([X.price > 2000, 'A'],
[between(X.price,1500,2000) , 'B'],
[between(X.price,1000,1500), 'C'],
[True, 'D'])) >>
select(X.price_class) >>
distinct(X.price_class))```

R语言实现

```##如果钻石价格大于2000，则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D
diamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A',
between(price,1500,2000) ~ 'B',
between(price,1000,1500) ~ 'C',
TRUE ~ 'D')) %>%
distinct(price_class)```

3 bind函数

Python实现

```###bind_rows()函数
diamonds2 = diamonds >> head(2)
diamonds3 = diamonds >> tail(3)
diamonds2 >> bind_rows(diamonds3)```
```##bind_cols()函数
diamonds4 = diamonds >> select(1, X.carat, 'cut', -1)
diamonds5 = diamonds >> select('x', 'y')
diamonds4 >> bind_cols(diamonds5) >> head(5)```

R语言实现

```##bind_rows()函数
diamonds2 = diamonds %>% head(2)
diamonds3 = diamonds %>% tail(3)
diamonds2 %>% bind_rows(diamonds3)

##bind_cols()函数
diamonds4 = diamonds %>% select(1, carat, cut, dim(diamonds)[2])
diamonds5 = diamonds %>% select(x, y)
diamonds4 %>% bind_cols(diamonds5) %>% head(5)```

4 连接函数

Python实现

```a = pd.DataFrame({
'x1':['A','B','C'],
'x2':[1,2,3]
})
b = pd.DataFrame({
'x1':['A','B','D'],
'x3':[True,False,True]
})```
```##inner_join函数
a >> inner_join(b, by='x1')```
```##left_join函数
a >> left_join(b, by='x1')```
```##right_join函数
a >> right_join(b, by='x1')```

R语言实现

```a = data.frame(x1 = c('A', 'B', 'C'), B = c(1, 2, 3))

b = data.frame(x1 = c('A', 'B', 'D'), D = c(TRUE, FALSE, TRUE))

##inner_join函数
a %>% inner_join(b, by = 'x1')  ##或者inner_join(a, b, by = 'x1')
##left_join函数
a %>% left_join(b, by = 'x1')  ##或者left_join(a, b, by = 'x1')
##right_join函数
a %>% right_join(b, by = 'x1')  ##或者rigth_join(a, b, by = 'x1')```

0 条评论

• ### 巧用R中的各种排名窗口函数

在sql中巧用窗口函数可以解决很多复杂的问题，窗口函数有4种函数类型：排名函数、偏移函数、聚合函数和分布函数，详细介绍可以浏览：

• ### 【Python可视化5】Seaborn之线性回归

Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上...

• ### 教程 | 十分钟学会函数式 Python

导读：函数式编程到底是什么？本文将详解其概念，同时分享怎样在 Python 中使用函数式编程。主要内容包括列表解析式和其他形式的解析式。

• ### Go 语言变量作用域

作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 Go 语言中变量可以在三个地方声明： 函数内定义的变量称为局部变量 函数外定义的变...

• ### Python中给函数添加元信息

我们写好一个自定义函数之后，要告诉其他人其他人怎么用这个函数，可以利用->为函数添加一些元信息，比如这个函数具体参数以及参数类型

• ### Shell下制作自解压安装包,实现脚本的简单加密

一、原理阐述 在 linux 下可以用几个最基本的命令制作一个自解压的程序。其原理是：利用 cat 命令可以将两个文件连起来（用>>追加也能达到同样效果），前一...

• ### IDEA 正式版终于支持中文版和 JDK 直接下载了（太方便了）

IDEA 2020.1 经过了漫长的打磨终于发布正式版了，而这次的版本不止直接支持 Java 14，还带来了两个重量级的功能，官方中文版支持和 JDK 直接下载...

• ### Web 性能优化：理解及使用 JavaScript 缓存

随着我们的应用程序的不断增长并开始进行复杂的计算时，对速度的需求越来越高（?），所以流程的优化变得必不可少。 当我们忽略这个问题时，我们最终的程序需要花费大量时...

• ### C++内部函数与外部函数 | 调用外部Max函数

内部函数是指一个函数只能被本文件中其他函数所调用，在定义内部函数时，在函数名和函数类型的前面加static。

• ### python 中 functools 宝库下的 partial

看起来好久没更新，再不更新估计手都生锈了。随便写点什么。看看日历，也算是新年第一篇。