在 R 中操作数据框
介绍
据说,数据科学项目中 80% 的时间都花在数据准备和数据清理上。在本指南中,您将了解使用流行包dplyr在 R 中操作数据框的技巧和技术。
“dplyr”库提供了几个强大的函数来操作数据框,数据框是一个包含行和列的二维数据结构。
具体来说,您将学习以下数据处理技术:
- 筛选
- 选择
- 合变
- 安排
- 总结
- Group_by
- 第 8 项:重命名
让我们首先加载数据。
数据
在本指南中,我们将使用包含 600 个观测值和 10 个变量的贷款申请人的虚构数据,如下所述:
Marital_status:申请人是否已婚(“是”)或未婚(“否”)
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)
Approval_status:贷款申请是否被批准(“是”)或未被批准(“否”)
年龄:申请人的年龄(岁)
性别:申请人是男性(“M”)还是女性(“F”)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
让我们加载所需的库和数据。
library(plyr)
library(readr)
library(ggplot2)
library(GGally)
library(dplyr)
library(mlbench)
dat <- read_csv("data_r2.csv")
glimpse(dat)
输出:
Observations: 600
Variables: 10
$ Marital_status <chr> "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", ...
$ Is_graduate <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Income <int> 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...
$ Loan_amount <int> 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...
$ Credit_score <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Satis...
$ approval_status <chr> "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "Yes", "...
$ Age <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...
$ Sex <chr> "F", "F", "M", "F", "M", "M", "M", "F", "F", "F", "M",...
$ Investment <int> 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690...
$ Purpose <chr> "Education", "Travel", "Others", "Others", "Travel", "...
输出显示数据有六个分类变量(标记为“chr”)和四个数值变量(标记为“int”)。我们将使用下面的代码行将分类变量转换为“factor”类型。
names <- c(1,2,5,6,8,10)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
输出:
Observations: 600
Variables: 10
$ Marital_status <fct> Yes, No, Yes, No, Yes, Yes, Yes, Yes, Yes, Yes, No, No...
$ Is_graduate <fct> No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, No, Y...
$ Income <int> 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...
$ Loan_amount <int> 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...
$ Credit_score <fct> Satisfactory, Satisfactory, Satisfactory, Satisfactory...
$ approval_status <fct> Yes, Yes, No, No, Yes, No, Yes, Yes, Yes, No, No, No, ...
$ Age <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...
$ Sex <fct> F, F, M, F, M, M, M, F, F, F, M, F, F, M, M, M, M, M, ...
$ Investment <int> 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690...
$ Purpose <fct> Education, Travel, Others, Others, Travel, Travel, Tra...
数据现在已经准备好执行各种数据处理步骤了。
筛选
filter命令根据指定条件选择行。我们首先过滤贷款获批申请人的数据。下面的第一行代码打印变量“approval_status”的表。输出显示有 410 名申请人的贷款已获批准。
第二行创建了一个新的数据框“approved_loan”,而第三行打印维度,即 410 行和 10 个变量。
table(dat$approval_status)
approved_loan = dat %>% filter(approval_status == "Yes")
print(dim(approved_loan))
输出:
1] 410 10
上述代码中需要注意的一点是管道运算符的使用,写作 ***%>%***。此管道运算符使我们能够将多个“dplyr”命令链接在一起,这样它就可以从一个命令获取输出并将其作为下一个命令的输入。
'filter' 命令还可用于包含多个条件。下面的代码使用两个变量 'approval_status' 和 'credit_score' 的不同条件来过滤数据。
aproved_satis <- dat %>% filter(approval_status == "Yes", Credit_score == "Satisfactory")
dim(aproved_satis)
输出:
1] 372 10
上述输出显示,由于我们使用的条件,结果数据现在有 372 条记录,而不是原来的 600 条。
filter 命令也可以与数值变量一起使用,如下面的代码行所示。输出确认操作已完成。
income_age <- dat %>% filter(Income > 600000, Age >= 30)
dim(income_age)
summary(income_age$Income)
summary(income_age$Age)
输出:
1] 205 10
Min. 1st Qu. Median Mean 3rd Qu. Max.
606300 711100 843300 1100888 1274700 3173700
Min. 1st Qu. Median Mean 3rd Qu. Max.
30.00 43.00 55.00 52.81 62.00 75.00
选择
select ()命令选择数据中的列。下面的代码行使用“%>%”运算符将整个数据作为“select”函数的输入。在 select 函数内部,指定要选择的列。
输出显示结果数据有 600 个观测值和 3 个变量。
dat_3 = dat %>% select(Marital_status, Age, Sex)
glimpse(dat_3)
输出:
Observations: 600
Variables: 3
$ Marital_status <fct> Yes, No, Yes, No, Yes, Yes, Yes, Yes, Yes, Yes, No, No,...
$ Age <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33,...
$ Sex <fct> F, F, M, F, M, M, M, F, F, F, M, F, F, M, M, M, M, M, M...
合变
mutate ()函数允许我们创建新变量,从而有助于特征工程。例如,我们可以使用两个变量“投资”和“收入”来创建一个新变量“Inv_inc_ratio”。mutate 动词将新列添加到数据框,如下面的语法所示。
dat_ratio = dat %>% mutate(Inv_inc_ratio = Investment / Income * 100)
dim(dat_ratio)
summary(dat_ratio$Inv_inc_ratio)
输出:
Min. 1st Qu. Median Mean 3rd Qu. Max.
20 20 70 55.69 70 70
安排
accordion ()函数根据指定条件排列行。例如,如果我们想按顺序排列“Inv_inc_ratio”变量,我们可以使用下面的代码行来实现。
dat_ratio_2 = dat_ratio %>% arrange(Inv_inc_ratio)
head(dat_ratio_2$Inv_inc_ratio)
输出:
1] 20 20 20 20 20 20
默认情况下,arrange() 函数按升序对变量进行排序。为了按降序排序和排列,我们在代码中添加了desc()函数。
dat_ratio_2 = dat_ratio %>% arrange(desc(Inv_inc_ratio))
head(dat_ratio_2$Inv_inc_ratio)
输出:
1] 70 70 70 70 70 70
'arrange()' 函数中还可以包含多个列。在这种情况下,每列都用于打破前面几列的值之间的平局。
dat_4 = dat_ratio %>% select(approval_status, Age, Inv_inc_ratio)
dim(dat_4)
dat_ratio_4 = dat_4 %>% arrange(approval_status, Age, Inv_inc_ratio)
head(dat_ratio_4)
输出:
1] 600 3
A tibble: 6 x 3
approval_status Age Inv_inc_ratio
<fct> <int> <dbl>
No 22 70
No 23 50
No 23 70
No 23 70
No 24 70
No 24 70
总结
summary ()函数总结数据框中的变量。例如,如果我们想要获取收入、贷款金额或年龄等变量的平均值,下面的代码行将生成并显示所需的输出。
dat_ratio %>%
summarize(avg_income = mean(Income,na.rm=TRUE),
avg_loan = mean(Loan_amount,na.rm=TRUE),
avg_ratio = mean(Age,na.rm=TRUE))
输出:
A tibble: 1 x 3
avg_income avg_loan avg_ratio
<dbl> <dbl> <dbl>
658615 1455120 48.7
Group_by
group_by ()函数根据一个或多个列对数据进行分组,然后操作分组的数据框。'group_by()' 函数通常与前面部分讨论的其他五个 'dplyr' 命令一起使用。
我们将举一个同时使用 'group_by()' 和 'summarize()' 命令的例子。下面的代码行按变量 'Purpose' 对数据进行分组,然后计算每个 'Purpose' 组的平均收入摘要。
data %>%
group_by(Purpose) %>%
summarise(mean_inc = mean(Income))
输出:
A tibble: 5 x 2
Purpose m
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~