使用 R 创建数据表

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

介绍

data.table包是data.frame的增强版本,它是使用R 的实际结构。数据框非常有用,为用户提供了一种组织、查看和访问数据的直观方式。它们的局限性在于,对大型数据集执行快速数据操作变得更加棘手。此外,代码可能变得复杂且与数据框不一致。在这种情况下,data.table是一个更好的选择,因为它具有一致的语法、高效的内存和并行化。

在本指南中,您将了解data.table的基础知识以及如何将其应用于数据操作和聚合任务。让我们从了解数据开始。

数据

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

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

  2. 家属:申请人家属人数

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

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

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

  6. Credit_score:申请人的信用评分是良好(“满意”)还是不良好(“不满意”)

  7. Approval_status:贷款申请是否已获批准(“1”)或未获批准(“0”)

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

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

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

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

使用 fread 快速读取数据

在 R 中加载数据的常用方法是通过readr库的read_csv()函数。这对于较小的数据集很有效,但在处理大数据时效率不高。data.table包提供了一种更快的替代方法来读取数据,即使用fread()函数,这是一个快速且并行的文件读取器,可以读取本地文件、来自网络的文件,甚至字符串文件。

下面的代码行加载所需的库,使用fread函数读取数据,并打印数据视图。

      library(data.table)
library(dplyr)

dat <- fread("data_eng.csv")
glimpse(dat)
    

输出:

      Observations: 600
Variables: 10
$ Marital_status  <chr> "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Dependents      <int> 1, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, ...
$ Is_graduate     <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Income          <int> 298500, 315500, 295100, 319300, 333300, 277700, 332100...
$ Loan_amount     <int> 71000, 75500, 70000, 70000, 98000, 71000, 58000, 64000...
$ Credit_score    <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Satis...
$ approval_status <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
$ Age             <int> 74, 71, 71, 68, 64, 64, 63, 61, 60, 59, 56, 55, 54, 54...
$ Sex             <chr> "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", "M",...
$ Purpose         <chr> "Wedding", "Wedding", "Wedding", "Wedding", "Wedding",...
    

输出显示数据集有五个数值变量(标记为“ int ”)和五个定性变量(标记为chr)。要使用data.table库,需要使用下面的代码行将data.frame转换为data.table 。结果数据的结构表明它既是data.table又是data.frame

      dat = as.data.table(dat)
str(dat)
    

输出:

      Classes ‘data.table’ and 'data.frame':	600 obs. of  10 variables:
 $ Marital_status : chr  "Yes" "No" "Yes" "Yes" ...
 $ Dependents     : int  1 0 0 1 2 0 1 0 0 0 ...
 $ Is_graduate    : chr  "No" "Yes" "Yes" "Yes" ...
 $ Income         : int  298500 315500 295100 319300 333300 277700 332100 320000 300400 311100 ...
 $ Loan_amount    : int  71000 75500 70000 70000 98000 71000 58000 64000 61000 75500 ...
 $ Credit_score   : chr  "Satisfactory" "Satisfactory" "Satisfactory" "Satisfactory" ...
 $ approval_status: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Age            : int  74 71 71 68 64 64 63 61 60 59 ...
 $ Sex            : chr  "M" "M" "M" "M" ...
 $ Purpose        : chr  "Wedding" "Wedding" "Wedding" "Wedding" ...
 - attr(*, ".internal.selfref")=<externalptr>
    

我们现在准备执行数据科学中常见的数据处理和聚合任务。

选择行和列

一个常见的数据操作任务是根据特定的行和列进行数据切片。

选择行

要提取单行数据,我们可以使用语法dataset[rownumber, ]。例如,下面的代码行打印第三行。

      d1 = dat[3,] 
str(d1)
    

输出:

      Classes ‘data.table’ and 'data.frame':	1 obs. of  10 variables:
 $ Marital_status : chr "Yes"
 $ Dependents     : int 0
 $ Is_graduate    : chr "Yes"
 $ Income         : int 295100
 $ Loan_amount    : int 70000
 $ Credit_score   : chr "Satisfactory"
 $ approval_status: int 1
 $ Age            : int 71
 $ Sex            : chr "M"
 $ Purpose        : chr "Wedding"
 - attr(*, ".internal.selfref")=<externalptr>
    

输出显示结果数据有一行和十个观测值。也可以提取一系列行。下面的代码提取第三到第五行和所有列,然后将它们存储在新对象d ' 中。第二行打印新数据的结构:10 个变量的 3 个观测值。

      d1 = dat[3:5,]
str(d1)
    

输出:

      Classes ‘data.table’ and 'data.frame':	3 obs. of  10 variables:
 $ Marital_status : chr  "Yes" "Yes" "Yes"
 $ Dependents     : int  0 1 2
 $ Is_graduate    : chr  "Yes" "Yes" "Yes"
 $ Income         : int  295100 319300 333300
 $ Loan_amount    : int  70000 70000 98000
 $ Credit_score   : chr  "Satisfactory" "Satisfactory" "Satisfactory"
 $ approval_status: int  1 1 1
 $ Age            : int  71 68 64
 $ Sex            : chr  "M" "M" "M"
 $ Purpose        : chr  "Wedding" "Wedding" "Wedding"
 - attr(*, ".internal.selfref")=<externalptr>
    

还可以对行进行高级过滤。如果我们想检查申请人的信用记录不令人满意但贷款仍然获得批准的记录,我们可以使用下面的第一行代码来实现。

第二行打印结果数据的维度:38 行和 10 个变量。第三行打印两个变量的表格。输出显示有 38 名申请人的信用评分不理想,但他们的贷款申请已获批准。

      d1 = dat[approval_status == 1 & Credit_score != "Satisfactory"] 

dim(d1)

table(d1$approval_status, d1$Credit_score)
    

输出:

      Not _satisfactory
  1                38
    

数据子集辅助函数

使用data.table的优点是它提供了许多辅助函数,可以实现高效的数据操作。

  1. %like%:此函数允许我们在字符或因子变量中搜索模式。下面第一至第三行代码说明了这一点,这些代码对变量Purpose以字符串Personal开头的所有行进行了子集化。

  2. %between%:此函数允许我们搜索闭区间内的值。下面第四至第六行代码说明了这一点,这些代码对申请人收入介于 384,975 美元(第一四分位数)和 766,100 美元(第三四分位数)之间的所有行进行了子集化。

  3. %chin%:此函数仅适用于字符向量。下面第七至第十行代码说明了这一点,这些代码对所有贷款申请目的为“家具”、“商业”或“婚礼”的行进行了子集化。

      # Lines 1 - 3: helper - %like% 
d1 = dat[Purpose %like% "^Personal"] 
dim(d1) 
table(d1$Purpose)

# Lines 4 - 6: helper - %between% 
d1 = dat[Income %between% c(384975, 766100)] 
dim(d1) 
summary(d1$Income)
 
#  Lines 7 - 10: helper - %chin% 
table(dat$Purpose)
d1 = dat[Purpose %chin% c("Furniture", "Business", "Wedding")]
dim(d1) 
table(d1$Purpose)
    

输出:

      # Output - Lines 1 – 3
 
[1] 166  10
 
Personal 
     166 
 
 
# Output - Lines 4 – 6
 
[1] 301  10
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 385200  444400  508400  529978  611100  766100 
 
 
# Output - Lines 7 – 10
 
 Business Education Furniture  Personal    Travel   Wedding 
       43       191        38       166       123        39 
 
[1] 120  10
 
 Business Furniture   Wedding 
       43        38        39
    

选择列

使用相应的名称可以轻松选择data.table中的列。例如,下面的代码行将提取Purpose变量的整个值向量。summary函数确认生成的向量d1的长度为 600 个值。

      d1 = dat[, Purpose]
str(d1)
    

输出:

      chr [1:600] "Wedding" "Wedding" "Wedding" "Wedding" "Wedding" "Wedding" ..
    

也可以使用list()函数选择多列。下面的第一行代码选择所有行和两个指定的列,而第二行打印结果数据的结构。

      d1 = dat[, list(approval_status, Income)]

str(d1)
    

输出:

      Classes ‘data.table’ and 'data.frame':	600 obs. of  2 variables:
 $ approval_status: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Income         : int  298500 315500 295100 319300 333300 277700 332100 320000 300400 311100 ...
 - attr(*, ".internal.selfref")=<externalptr>
    

我们已经学习了如何选择列,但有时我们可能想要取消选择某些列。这可以使用采用-c("col1", "col2", ...)形式的便捷函数来完成。例如,下面的代码行创建了一个排除变量SexDependents的数据子集。代码的输出证实了这种排除。

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