R语言 转换数据表的列类
data.table包用于简化数据操作,如R编程语言中数据表的子集、分组和更新操作。
R编程语言中的sapply()方法是用来在指定的R对象、数据框或矩阵上应用一个函数。如果我们指定FUN = “class”,就会返回数据表中每一列的数据类型。
语法
sapply ( data-table , FUN)
R语言中特定列的数据类型可以通过显式转换改变为所需的类。结果必须存储在一个不同的变量中,以便保留它。
语法
data.table [, col-name := conv-func(col-name) ]
在这个语法中,conv-func说明了要应用于特定列的显式转换函数。例如,对于字符转换,它是as.character();对于数字转换,是as.numeric();对于因子型变量转换,是as.factor()。
例子
library(data.table)
# creating a data frame
data_table <- data.table(col1 = c(1:5),
col2 = letters[1:5],
col3 = factor(sample(5:10)))
print ("Original DataTable")
print (data_table)
# getting class of columns
sapply(data_table , class)
# convert column into character
data_table_mod <- data_table[ , col3 := as.character(col3)]
print ("Modified DataTable")
print (data_table_mod)
sapply(data_table_mod , class)
输出
[1] "Original DataTable"
col1 col2 col3
1: 1 a 5
2: 2 b 8
3: 3 c 7
4: 4 d 6
5: 5 e 9
6: 1 a 10
col1 col2 col3
"integer" "character" "factor"
[1] "Modified DataTable"
col1 col2 col3
1: 1 a 5
2: 2 b 8
3: 3 c 7
4: 4 d 6
5: 5 e 9
6: 1 a 10
col1 col2 col3
"integer" "character" "character"
然而,只有当特定的列可以转换为数字形式时,才可以模拟字符因子转换为数字。在下面的代码中,当数据表的col2使用as.numeric()转换为积分格式时,数据会丢失并被缺失的值所取代。
例子
library(data.table)
# creating a data frame
data_table <- data.table(col1 = c(1:5),
col2 = letters[1:5],
col3 = factor(sample(5:10)))
print ("Original DataTable")
print (data_table)
# getting class of columns
sapply(data_table , class)
# convert column into character
data_table_mod <- data_table[ , col2 := as.numeric(col2)]
print ("Modified DataTable")
print (data_table_mod)
sapply(data_table_mod , class)
输出
[1] "Original DataTable"
col1 col2 col3
1: 1 a 10
2: 2 b 6
3: 3 c 5
4: 4 d 9
5: 5 e 7
6: 1 a 8
col1 col2 col3
"integer" "character" "factor"
[1] "Modified DataTable"
col1 col2 col3
1: 1 NA 10
2: 2 NA 6
3: 3 NA 5
4: 4 NA 9
5: 5 NA 7
6: 1 NA 8
col1 col2 col3
"integer" "numeric" "factor"
R语言中的lapply()方法用于在提供的数据框或数据表对象的所有组件上应用一个用户定义的函数。它主要用于嵌套列表。
语法
lapply( obj , FUN)
参数
obj:一个要应用转换的对象
FUN:应用于所提供对象的每个元素的函数
下面的语法可以用来将指定的列转换为因子类型的格式。这个实现是通过使用:=
的引用来更新列,例如,DT[, names(DT) := lapply(.SD, as.factor)],也就是说,它不会创建任何你的数据的副本。因为,因子是分类变量,可以用来存储整数和字符,所以在数据检索中没有任何损失或歧义。
例子
library(data.table)
# creating a data frame
data_table <- data.table(col1 = c(1:5),
col2 = letters[1:5],
col3 = factor(sample(5:10)))
print ("Original DataTable")
print (data_table)
# getting class of columns
sapply(data_table , class)
# convert column into factor type
cols <- c("col1","col2")
# Change class of certain columns
data_table_mod <- data_table[ ,
(cols) := lapply(.SD, as.factor),
.SDcols = cols]
print ("Modified DataTable")
print (data_table_mod)
sapply(data_table_mod , class)
输出
[1] "Original DataTable"
col1 col2 col3
1: 1 a 5
2: 2 b 8
3: 3 c 7
4: 4 d 6
5: 5 e 9
6: 1 a 10
col1 col2 col3
"integer" "character" "factor"
[1] "Modified DataTable"
col1 col2 col3
1: 1 a 5
2: 2 b 8
3: 3 c 7
4: 4 d 6
5: 5 e 9
6: 1 a 10
col1 col2 col3
"factor" "factor" "factor"