當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R DataFrame Column轉Numeric用法及代碼示例


在本文中,我們將了解如何在 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 的類被轉換為數字。



相關用法


注:本文由純淨天空篩選整理自mallikagupta90大神的英文原創作品 Convert DataFrame Column to Numeric in R。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。