R語言:實現(xiàn)因子與字符串的互轉(zhuǎn)
在導(dǎo)入大批量數(shù)據(jù)時,如果沒有顯式地指定“stringsAsFactors = FALSE”,默認會將所有的字符串轉(zhuǎn)換為因子,導(dǎo)致數(shù)據(jù)處理速度較慢。
示例數(shù)據(jù)如下:
name,math,english,sex,year "yiifaa",65,68,"M",2018 "yiifee",95,98,"F",2018 "guagua",75,78,"M",2018 "MM",85,88,"F",2018
查看數(shù)據(jù)概要,發(fā)現(xiàn)默認將字符串轉(zhuǎn)換為因子,并進行了分組計數(shù)(這也是處理速度較慢的原因之一)
概要如下:
name math english sex year guagua:1 Min. :65.0 Min. :68.0 F:2 Min. :2018 MM :1 1st Qu.:72.5 1st Qu.:75.5 M:2 1st Qu.:2018 yiifaa:1 Median :80.0 Median :83.0 Median :2018 yiifee:1 Mean :80.0 Mean :83.0 Mean :2018 3rd Qu.:87.5 3rd Qu.:90.5 3rd Qu.:2018 Max. :95.0 Max. :98.0 Max. :2018
但這樣的分組計數(shù)并沒有意義,所以需要利用“as.character”轉(zhuǎn)換為字符,如下:
#! /usr/bin/env RScript setwd("D:/Workspace/R-Works/R-Stat") scores <- read.table("Score.txt", header = TRUE, sep = ",", quote="\"", encoding = "UTF-8", stringsAsFactors = TRUE) # 將因子轉(zhuǎn)換為字符 scores$name <- as.character(scores$name) # 多轉(zhuǎn)一個進行測試 scores$sex <- as.character(scores$sex)
再次查看概要,如下:
name math english sex year Length:4 Min. :65.0 Min. :68.0 Length:4 Min. :2018 Class :character 1st Qu.:72.5 1st Qu.:75.5 Class :character 1st Qu.:2018 Mode :character Median :80.0 Median :83.0 Mode :character Median :2018 Mean :80.0 Mean :83.0 Mean :2018 3rd Qu.:87.5 3rd Qu.:90.5 3rd Qu.:2018 Max. :95.0 Max. :98.0 Max. :2018
可以看到,概要中已經(jīng)沒有了分組計數(shù),但多了總數(shù)計量,如果要恢復(fù)分組計數(shù),則需要重新創(chuàng)建因子,如下:
scores$sex <- factor(scores$sex, levels=c("M", "F"), ordered = TRUE)
結(jié)論
在導(dǎo)入大批量數(shù)據(jù)時,為了提高性能,盡可能分兩步走:
1. 顯式指定“stringsAsFactors = FALSE”;
2. 依次將所需要的數(shù)據(jù)列(向量)轉(zhuǎn)換為因子;
補充:R語言:變量名稱和字符串的轉(zhuǎn)換
在R語言中,經(jīng)常會遇到變量名稱和字符串相互轉(zhuǎn)換的問題。
比如說,進行1000次循環(huán)運算,并將運算結(jié)果存儲在1000個變量中,如x_1, x_2, ... , x_1000。這時候可以使用assign()函數(shù),示例如下:
> a 錯誤: 找不到對象'a' > assign('a', 1) > a [1] 1
上面的例子將字符'a'轉(zhuǎn)變?yōu)樽兞縜,并將其賦值為1 。
相反,如果我們想遍歷一個變量序列,并對其中的每一個變量都進行操作,該怎么辦呢?我們可以使用get()函數(shù)。示例如下:
> a <- 1 > b <- 2 > c <- 3 > sequence <- c('a', 'b', 'c') > for (var in sequence){print(var + 10)}
錯誤于var + 10 : 二進列運算符中有非數(shù)值參數(shù)
> for (var in sequence){print(get(var) + 10)} [1] 11 [1] 12 [1] 13
我們可以發(fā)現(xiàn),get函數(shù)將字符var轉(zhuǎn)變?yōu)樽兞浚⒏鶕?jù)變量的值進行后續(xù)操作。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語言數(shù)據(jù)可視化繪圖Slope chart坡度圖畫法
這篇文章主要為大家介紹了R語言數(shù)據(jù)可視化繪圖Slope?chart坡度圖的畫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02R語言繪圖數(shù)據(jù)可視化pie?chart餅圖
這篇文章主要介紹了R語言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語言來畫大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R語言ggplot在熱圖上標注相關(guān)系數(shù)的操作方法
R語言是一種開源、免費的編程語言,主要用于統(tǒng)計分析、圖形化和機器學習,這篇文章主要介紹了R語言ggplot怎么在熱圖上標注相關(guān)系數(shù),需要的朋友可以參考下2024-07-07R語言之反轉(zhuǎn)ggplot2中的圖例鍵順序方法詳解
在本教程中,我們將學習如何反轉(zhuǎn)ggplot2中圖例鍵的順序,文章通過詳細的示例代碼給大家介紹如何反轉(zhuǎn)ggplot2中的圖例鍵順序,感興趣的同學可以跟著小編一起來學習2023-05-05