R語(yǔ)言:實(shí)現(xiàn)因子與字符串的互轉(zhuǎn)
在導(dǎo)入大批量數(shù)據(jù)時(shí),如果沒(méi)有顯式地指定“stringsAsFactors = FALSE”,默認(rèn)會(huì)將所有的字符串轉(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)默認(rèn)將字符串轉(zhuǎn)換為因子,并進(jìn)行了分組計(jì)數(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
但這樣的分組計(jì)數(shù)并沒(méi)有意義,所以需要利用“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)一個(gè)進(jìn)行測(cè)試 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)沒(méi)有了分組計(jì)數(shù),但多了總數(shù)計(jì)量,如果要恢復(fù)分組計(jì)數(shù),則需要重新創(chuàng)建因子,如下:
scores$sex <- factor(scores$sex, levels=c("M", "F"), ordered = TRUE)
結(jié)論
在導(dǎo)入大批量數(shù)據(jù)時(shí),為了提高性能,盡可能分兩步走:
1. 顯式指定“stringsAsFactors = FALSE”;
2. 依次將所需要的數(shù)據(jù)列(向量)轉(zhuǎn)換為因子;
補(bǔ)充:R語(yǔ)言:變量名稱(chēng)和字符串的轉(zhuǎn)換
在R語(yǔ)言中,經(jīng)常會(huì)遇到變量名稱(chēng)和字符串相互轉(zhuǎn)換的問(wèn)題。
比如說(shuō),進(jìn)行1000次循環(huán)運(yùn)算,并將運(yùn)算結(jié)果存儲(chǔ)在1000個(gè)變量中,如x_1, x_2, ... , x_1000。這時(shí)候可以使用assign()函數(shù),示例如下:
> a 錯(cuò)誤: 找不到對(duì)象'a' > assign('a', 1) > a [1] 1
上面的例子將字符'a'轉(zhuǎn)變?yōu)樽兞縜,并將其賦值為1 。
相反,如果我們想遍歷一個(gè)變量序列,并對(duì)其中的每一個(gè)變量都進(jìn)行操作,該怎么辦呢?我們可以使用get()函數(shù)。示例如下:
> a <- 1 > b <- 2 > c <- 3 > sequence <- c('a', 'b', 'c') > for (var in sequence){print(var + 10)}
錯(cuò)誤于var + 10 : 二進(jìn)列運(yùn)算符中有非數(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ù)變量的值進(jìn)行后續(xù)操作。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言數(shù)據(jù)可視化繪圖Slope chart坡度圖畫(huà)法
這篇文章主要為大家介紹了R語(yǔ)言數(shù)據(jù)可視化繪圖Slope?chart坡度圖的畫(huà)法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02R語(yǔ)言基礎(chǔ)數(shù)據(jù)類(lèi)型的具體使用
本文主要介紹了R語(yǔ)言基礎(chǔ)數(shù)據(jù)類(lèi)型的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖
這篇文章主要介紹了R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語(yǔ)言來(lái)畫(huà)大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R語(yǔ)言ggplot在熱圖上標(biāo)注相關(guān)系數(shù)的操作方法
R語(yǔ)言是一種開(kāi)源、免費(fèi)的編程語(yǔ)言,主要用于統(tǒng)計(jì)分析、圖形化和機(jī)器學(xué)習(xí),這篇文章主要介紹了R語(yǔ)言ggplot怎么在熱圖上標(biāo)注相關(guān)系數(shù),需要的朋友可以參考下2024-07-07R語(yǔ)言之反轉(zhuǎn)ggplot2中的圖例鍵順序方法詳解
在本教程中,我們將學(xué)習(xí)如何反轉(zhuǎn)ggplot2中圖例鍵的順序,文章通過(guò)詳細(xì)的示例代碼給大家介紹如何反轉(zhuǎn)ggplot2中的圖例鍵順序,感興趣的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)2023-05-05