R语言 把数据框架转换为data.table
在这篇文章中,我们将讨论如何在R编程语言中把数据框架转换为data.table。data.table是一个R包,它提供了数据框架的增强版本。data.table的特点。
- data.table不设置或使用行名
- 行号用”: “打印,以提高可读性
- 与数据框架不同,在data.table中,字符类型的列默认不会被转换为因子。
方法1:使用setDT()方法
虽然数据框架可以使用基本的R包,但data.table对象是data.table包的一部分,需要在工作空间中安装。setDT()方法可以用来将数据框架或列表强制到data.table中,在这里对原始数据框架进行转换。修改是通过对原始数据结构的引用进行的。
语法: setDT(x)
参数:
- x : 有名或无名的列表、数据框或数据表。
例子 1 :
# 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)
输出
[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
所有存储在数据框架中的缺失和不确定的值也会保留在data.table中。行名被重新分配为以整数值开始的标识符,从1开始直到数据框架中的行数。data.table库还提供了其他函数来验证R对象是否是一个data.table,使用is.data.table(data_frame)。如果指定的参数是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 <NA>
row3 4 b
row4 NA e
row5 3 f
row6 NA G
[1] "Resultant DataFrame"
col1 col2
1: 1 a
2: NA <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,并且转换是可能的。不会对原始数据框架进行更改,因此,它会创建一个基础对象的副本。
语法: as.data.table(x,keep.rownames=FALSE)
参数:
- x : 一个已命名或未命名的列表、数据框或数据表。
- keep.rownames: 默认情况下。为假。对于data.frame,TRUE保留data.frame的行名在一个新的列rn下。 keep.rownames = “id “命名列 “id”。
例子
# 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 <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 <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值。