在本文中,我们将了解如何在 R 编程语言中将 DataFrame 列转换为数字。
所有 DataFrame 列都与一个类相关联,该类是该列元素所属数据类型的指示符。因此,为了模拟数据类型转换,在这种情况下必须将数据元素转换为所需的数据类型,即该列的所有元素都应该有资格成为数值。
sapply()方法可用于以向量的形式检索列变量的数据类型。用于以下操作的数据帧如下:
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(1:4),
col2 = factor(4:7),
col3 = letters[2:5],
col4 = 97:100, stringsAsFactors = FALSE)
print("Original DataFrame")
print (data_frame)
# indicating the data type of
# each variable
sapply(data_frame, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 1 1 4 b 97 2 2 5 c 98 3 3 6 d 99 4 4 7 e 100 col1 col2 col3 col4 "character" "factor" "character" "integer"
transform()方法可用于模拟对该方法的参数列表中指定的数据对象进行修改。更改必须显式保存到同一数据帧或新数据帧中。它可用于向数据添加新变量或修改现有变量。
用法:transform(data, value)
Arguments :
- data - 要修改的数据对象
- value - 要添加的值
示例 1:将因子类型列转换为数值
进行这些转换时可能不会保留数据。数据可能会丢失或被篡改。变换操作的结果必须保存在某个变量中,以便进一步使用它。下面的代码片段说明了这一点:
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(1:4),
col2 = factor(4:7),
col3 = letters[2:5],
col4 = 97:100, stringsAsFactors = FALSE)
print("Original DataFrame")
print (data_frame)
# indicating the data type of each
# variable
sapply(data_frame, class)
# converting factor type column to
# numeric
data_frame_mod <- transform(
data_frame,col2 = as.numeric(col2))
print("Modified DataFrame")
print (data_frame_mod)
# indicating the data type of each variable
sapply(data_frame_mod, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 1 1 4 b 97 2 2 5 c 98 3 3 6 d 99 4 4 7 e 100 col1 col2 col3 col4 "character" "factor" "character" "integer" [1] "Modified DataFrame" col1 col2 col3 col4 1 1 1 b 97 2 2 2 c 98 3 3 3 d 99 4 4 4 e 100 col1 col2 col3 col4 "character" "numeric" "character" "integer"
说明:col2 中的原始数据帧值范围为 4 到 7,而修改后的数据帧值为以 1 开头的整数。这意味着在将因子直接转换为数字时,数据可能不会保留。
为了保留数据,需要首先将列的类型显式转换为 as.character(col-name)。
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(1:4),
col2 = factor(4:7),
col3 = letters[2:5],
col4 = 97:100, stringsAsFactors = FALSE)
print("Original DataFrame")
print (data_frame)
# indicating the data type of each
# variable
sapply(data_frame, class)
# converting factor type column to
# numeric
data_frame_mod <- transform(
data_frame, col2 = as.numeric(as.character(col2)))
print("Modified DataFrame")
print (data_frame_mod)
# indicating the data type of each
# variable
sapply(data_frame_mod, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 1 1 4 b 97 2 2 5 c 98 3 3 6 d 99 4 4 7 e 100 col1 col2 col3 col4 "character" "factor" "character" "integer" [1] "Modified DataFrame" col1 col2 col3 col4 1 1 4 b 97 2 2 5 c 98 3 3 6 d 99 4 4 7 e 100 col1 col2 col3 col4 "character" "numeric" "character" "integer"
说明:为了保持数据的统一性,先将col2的数据类型改为as.character,然后改为数值,按原样显示数据。
示例 2:将字符类型列转换为数字
仅当这些转换可行时,字符类型列(单个字符或字符串)才可以转换为数值。否则,数据会丢失,并在执行时被编译器强制转换为缺失值或 NA 值。
此方法说明了由于插入缺失值或 NA 值代替字符而导致的数据丢失。引入这些 NA 值是因为无法直接进行相互转换。
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(6:9),
col2 = factor(4:7),
col3 = letters[2:5],
col4 = 97:100, stringsAsFactors = FALSE)
print("Original DataFrame")
print (data_frame)
# indicating the data type of each
# variable
sapply(data_frame, class)
# converting character type column
# to numeric
data_frame_col1 <- transform(
data_frame,col1 = as.numeric(col1))
print("Modified col1 DataFrame")
print (data_frame_col1)
# indicating the data type of each
# variable
sapply(data_frame_col1, class)
# converting character type column
# to numeric
data_frame_col3 <- transform(
data_frame,col3 = as.numeric(col3))
print("Modified col3 DataFrame")
print (data_frame_col3)
# indicating the data type of each
# variable
sapply(data_frame_col3, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 1 6 4 b 97 2 7 5 c 98 3 8 6 d 99 4 9 7 e 100 col1 col2 col3 col4 "character" "factor" "character" "integer" [1] "Modified col1 DataFrame" col1 col2 col3 col4 1 6 4 b 97 2 7 5 c 98 3 8 6 d 99 4 9 7 e 100 col1 col2 col3 col4 "numeric" "factor" "character" "integer" [1] "Modified col3 DataFrame" col1 col2 col3 col4 1 6 4 NA 97 2 7 5 NA 98 3 8 6 NA 99 4 9 7 NA 100 col1 col2 col3 col4 "character" "factor" "numeric" "integer" Warning message: In eval(substitute(list(...)), `_data`, parent.frame()) : NAs introduced by coercion
说明:使用 sapply() 方法,数据帧的 col3 的类是字符,即它由单字节字符值组成,但在应用 transform() 方法时,这些字符值将转换为缺失值或 NA 值,因为字符不能直接转换为数字数据。因此,这会导致数据丢失。
可以通过不使用 stringAsFactors=FALSE 进行转换,然后首先使用 as.factor() 将字符隐式转换为因子,然后使用 as.numeric() 将字符转换为数字数据类型。即使在这种情况下,有关实际字符串的信息也会完全丢失。然而,数据变得不明确并可能导致实际数据丢失。根据列值的词典排序结果简单地为数据分配数值。
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(6:9),
col2 = factor(4:7),
col3 = c("Geeks","For","Geeks","Gooks"),
col4 = 97:100)
print("Original DataFrame")
print (data_frame)
# indicating the data type of each
# variable
sapply(data_frame, class)
# converting character type column
# to numeric
data_frame_col3 <- transform(
data_frame,col3 = as.numeric(as.factor(col3)))
print("Modified col3 DataFrame")
print (data_frame_col3)
# indicating the data type of each
# variable
sapply(data_frame_col3, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 1 6 4 Geeks 97 2 7 5 For 98 3 8 6 Geeks 99 4 9 7 Gooks 100 col1 col2 col3 col4 "factor" "factor" "factor" "integer" [1] "Modified col3 DataFrame" col1 col2 col3 col4 1 6 4 2 97 2 7 5 1 98 3 8 6 2 99 4 9 7 3 100 col1 col2 col3 col4 "factor" "factor" "numeric" "integer"
解释:col3 中的第一个和第三个字符串相同,因此分配了相同的数值。总的来说,这些值按升序排序,然后分配相应的整数值。 “For” 是按字典顺序出现的最小字符串,因此,分配的数值为 1,然后是“Geeks”,这两个实例都映射到 2,而 “Gooks” 分配的数值为 3。因此,col3 类型更改为数字。
示例 3:将逻辑类型列转换为数值列
true 布尔值被赋予相当于 2 的数值, false 被赋予数值 1。可以轻松地进行转换,同时保持数据一致性。
为了保留数据,首先使用 as.factor 将包含这些逻辑值的列转换为因子类型值,然后使用 as.numeric() 为这些值分配一个数值,这只是为这两个值分配整数标识符。
R
# declare a dataframe
# different data type have been
# indicated for different cols
data_frame <- data.frame(
col1 = as.character(6:9),
col2 = factor(4:7),
col3 = c("Geeks","For","Geeks","Gooks"),
col4 = 97:100,
col5 = c(TRUE,FALSE,TRUE,FALSE))
print("Original DataFrame")
print (data_frame)
# indicating the data type of each
# variable
sapply(data_frame, class)
# converting character type column
# to numeric
data_frame_col5 <- transform(
data_frame,col5 = as.numeric(as.factor(col5)))
print("Modified col5 DataFrame")
print (data_frame_col5)
# indicating the data type of each
# variable
sapply(data_frame_col5, class)
输出:
[1] "Original DataFrame" col1 col2 col3 col4 col5 1 6 4 Geeks 97 TRUE 2 7 5 For 98 FALSE 3 8 6 Geeks 99 TRUE 4 9 7 Gooks 100 FALSE col1 col2 col3 col4 col5 "factor" "factor" "factor" "integer" "logical" [1] "Modified col5 DataFrame" col1 col2 col3 col4 col5 1 6 4 Geeks 97 2 2 7 5 For 98 1 3 8 6 Geeks 99 2 4 9 7 Gooks 100 1 col1 col2 col3 col4 col5 "factor" "factor" "factor" "integer" "numeric"
说明:使用sapply()方法,数据帧的col5的类别是逻辑的,即它由TRUE和FALSE布尔值组成,但是在应用transform()方法时,这些逻辑值被映射到整数,并且col5 的类被转换为数字。
相关用法
- R DataFrame转vector用法及代码示例
- R Date转Numeric用法及代码示例
- R Character转Timestamp用法及代码示例
- R Character转Factor用法及代码示例
- R Character转Numeric用法及代码示例
- R Factor转Character用法及代码示例
- R Numbers转Dates用法及代码示例
- R String转Datetime用法及代码示例
- R Matrix转Vector用法及代码示例
- R list转array用法及代码示例
- R CSV转list用法及代码示例
- R matrix转list用法及代码示例
- R CSV转array用法及代码示例
- R table转dataframe用法及代码示例
- R Matrix转Dataframe用法及代码示例
- R SparkR alias用法及代码示例
- R SparkR approxQuantile用法及代码示例
- R SparkR arrange用法及代码示例
- R SparkR as.data.frame用法及代码示例
- R SparkR attach用法及代码示例
- R SparkR avg用法及代码示例
- R SparkR awaitTermination用法及代码示例
- R SparkR broadcast用法及代码示例
- R SparkR cache用法及代码示例
- R SparkR cacheTable用法及代码示例
注:本文由纯净天空筛选整理自mallikagupta90大神的英文原创作品 Convert DataFrame Column to Numeric in R。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。