📜  在 R 中转换数据表的列类

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

在 R 中转换数据表的列类

data.table 包用于简化 R 编程语言中数据表的子设置、分组和更新操作等数据操作操作。

R 编程语言中的 sapply() 方法用于在指定的 R 对象、数据框或矩阵上应用函数。如果我们指定 FUN = “class”,则返回数据表中每一列的数据类型。

句法:

R 语言中特定列的数据类型可以通过显式转换更改为所需的类。结果必须存储在不同的变量中,以保存它。



句法:

在此语法中,conv-func 说明了要应用于特定列的显式转换函数。例如,它是作为。 字符() 用于字符转换, as.numeric() 用于数字转换, as.factor() 用于因子类型变量转换。

例子:

R
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)


R
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)


R
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    
"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() 方法用于对提供的数据框或数据表对象的所有组件应用用户定义的函数。它主要用于嵌套列表。

以下语法可用于将指定列类似地转换为因子类型格式。此实现用于通过引用更新列,使用`:=`,例如 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"