在 R 中操作数据框

发布日期:2026-06-25 05:36:03   来源 : 杭州电子商务研究院    浏览量 :10
杭州电子商务研究院 发布日期:2026-06-25 05:36:03  
10

介绍

据说,数据科学项目中 80% 的时间都花在数据准备和数据清理上。在本指南中,您将了解使用流行包dplyr在 R 中操作数据框的技巧和技术。

“dplyr”库提供了几个强大的函数来操作数据框,数据框是一个包含行和列的二维数据结构。

具体来说,您将学习以下数据处理技术:

  1. 筛选
  2. 选择
  3. 合变
  4. 安排
  5. 总结
  6. Group_by
  7. 第 8 项:重命名

让我们首先加载数据。

数据

在本指南中,我们将使用包含 600 个观测值和 10 个变量的贷款申请人的虚构数据,如下所述:

  1. Marital_status:申请人是否已婚(“是”)或未婚(“否”)

  2. Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)

  3. 收入:申请人的年收入(美元)

  4. Loan_amount:提交申请的贷款金额(美元)

  5. Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)

  6. Approval_status:贷款申请是否被批准(“是”)或未被批准(“否”)

  7. 年龄:申请人的年龄(岁)

  8. 性别:申请人是男性(“M”)还是女性(“F”)

  9. 投资额:申请人申报的股票和共同基金投资总额(美元)

  10. 目的:申请贷款的目的

让我们加载所需的库和数据。

      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
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据