📌  相关文章
📜  在 R 中将数据帧转换为 data.table

📅  最后修改于: 2022-05-13 01:55:01.401000             🧑  作者: Mango

在 R 中将数据帧转换为 data.table

在本文中,我们将讨论如何在 R 编程语言中将 dataframe 转换为 data.table。 data.table 是一个 R 包,它提供了数据帧的增强版本。 data.table 的特点:

  • data.table 不设置或使用行名称
  • 行号用 : 打印以提高可读性
  • 与数据帧不同,字符类型的列在 data.table 中默认永远不会转换为因子。

方法一:使用 setDT() 方法

虽然使用基本 R 包可以使用数据帧,但 data.table 对象是 data.table 包的一部分,需要安装在工作空间中。 setDT() 方法可用于将数据帧或列表强制转换为 data.table,其中转换为原始数据帧。修改参考原数据结构。

示例 1:

R
# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1:7),
                         col2 = LETTERS[1:7],
                         col3 = letters[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
setDT(data_frame)
print ("Resultant DataFrame")
print (data_frame)


R
# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
setDT(data_frame)
print ("Resultant DataFrame")
print (data_frame)
  
# checking if the dataframe is data table
print ("Check if data table")
print (is.data.table(data_frame))


R
# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
dt <- as.data.table(data_frame, TRUE)
print ("Resultant DataFrame")
print (dt)
print ("Check if data table")
print (is.data.table(dt))


输出

[1] "Original DataFrame"
> print (data_frame)
    col1 col2 col3
1    1    A    a
2    2    B    b
3    3    C    c
4    4    D    d
5    5    E    e
6    6    F    f
7    7    G    g
[1] "Resultant DataFrame"
> print (data_frame)
     col1 col2 col3
1:    1    A    a
2:    2    B    b
3:    3    C    c
4:    4    D    d
5:    5    E    e
6:    6    F    f
7:    7    G    g

存储在数据框中的所有缺失值和 NA 值也保存在 data.table 中。行名称被重新分配给以整数值开头的标识符,从 1 到数据帧中的行数。库 data.table 还提供其他函数来验证 R 对象是否是使用 is.data.table(data_frame) 的 data.table。如果指定的参数是 data.table 则返回 true,否则返回 false。

示例 2:

电阻

# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
setDT(data_frame)
print ("Resultant DataFrame")
print (data_frame)
  
# checking if the dataframe is data table
print ("Check if data table")
print (is.data.table(data_frame))

输出

[1] "Original DataFrame"
       col1 col2
row1    1    a
row2   NA 
row3    4    b
row4   NA    e
row5    3    f
row6   NA    G
[1] "Resultant DataFrame"
     col1 col2
1:   1    a
2:   NA 
3:   4    b
4:  NA    e
5:   3    f
6:   NA    G
[1] "Check if data table"
[1] TRUE

说明:原始数据帧存储为 data.frame 对象,然后使用 setDT 方法返回相同的数据帧,行号附加在开头,行号标识符后跟冒号。缺失值,即 NA 原样返回。由于对数据框进行了更改,因此当我们使用 is.data.table() 检查它是否为数据表时,它返回逻辑 TRUE 值。



方法 2:使用 as.data.table() 方法

as.data.table() 方法可用于将数据框或列表强制转换为 data.table,如果指定的对象最初不是 data.table,并且转换是可能的。不会对原始数据框进行更改,因此,它会创建基础对象的副本。

例子:

电阻

# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
dt <- as.data.table(data_frame, TRUE)
print ("Resultant DataFrame")
print (dt)
print ("Check if data table")
print (is.data.table(dt))

输出

[1] "Original DataFrame" 
> print (data_frame)      
           col1 col2 
   row1    1    a 
   row2   NA  
   row3    4    b 
   row4   NA    e 
   row5    3    f 
   row6   NA    G 
[1] "Resultant DataFrame"
       rn col1 col2 
1: row1    1    a 
2: row2   NA  
3: row3    4    b 
4: row4   NA    e 
5: row5    3    f 
6: row6   NA    G 
[1] "Check if data table" 
[1] TRUE

说明:原始数据框的每一行都有一个行名称。当数据框转换为数据表时,行名称形成一个单独的列“rn”,并且每一行都以行号标识符开头,后跟冒号。但是,不会对原始数据帧进行更改。因此,当我们将 is.data.table() 方法应用于原始数据帧时,它返回 FALSE。相反,如果我们将此方法应用于 as.data.table() 方法的结果,我们将获得 TRUE 值。