在本文中,我們將了解如何在 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。