在 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,其中转换为原始数据帧。修改参考原数据结构。
Syntax: setDT(x)
Arguments :
- x : A named or unnamed list, data.frame or 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,并且转换是可能的。不会对原始数据框进行更改,因此,它会创建基础对象的副本。
Syntax: as.data.table(x,keep.rownames=FALSE)
Arguments :
- x : A named or unnamed list, data.frame or data.table.
- keep.rownames : By default: False. For data.frames, TRUE retains the data.frame’s row names under a new column rn. keep.rownames = “id” names the column “id” instead.
例子:
电阻
# 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 值。