溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用R語(yǔ)言怎么實(shí)現(xiàn)因子型數(shù)值轉(zhuǎn)數(shù)值型操作

發(fā)布時(shí)間:2021-04-19 16:19:04 來(lái)源:億速云 閱讀:519 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了使用R語(yǔ)言怎么實(shí)現(xiàn)因子型數(shù)值轉(zhuǎn)數(shù)值型操作,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

因子(factor)轉(zhuǎn)換成數(shù)值型(numeric)的規(guī)則是這樣的:

一共有n個(gè)數(shù),那么轉(zhuǎn)換后的數(shù)字就會(huì)在1——n中取值,數(shù)字最小的取一,次小的取二,以此類推。

那么如何讓因子(factor)類型里的數(shù)值轉(zhuǎn)換對(duì)應(yīng)的數(shù)值型呢?

 mean(as.numeric(as.character(factorname)))
     mean(as.numeric(levels(factorname)[factorname]))

以上代碼都可以實(shí)現(xiàn)將因子(factor)類型里的數(shù)值轉(zhuǎn)換對(duì)應(yīng)的數(shù)值型,思路都是先轉(zhuǎn)換成字符型然后再轉(zhuǎn)換成數(shù)值型。

補(bǔ)充:R_as.numeric()函數(shù)在轉(zhuǎn)換小數(shù)時(shí)返回?zé)o意義結(jié)果的解決

本文重點(diǎn)解決as.numeric()函數(shù)將factor轉(zhuǎn)為數(shù)值時(shí)得出的無(wú)意義結(jié)果的解決

假設(shè)有數(shù)據(jù)框aaa

x   |    y     |       value 
------------------------------------------
a1      b2        0.510665432157769
a2      b3        0.887655678543227
..      ..              ...

運(yùn)行as.numeric(aaa[1,3]),返回的結(jié)果居然是123?當(dāng)然,這只是個(gè)栗子,為了表達(dá)問(wèn)題所在。真正運(yùn)行時(shí)不一定得到的結(jié)果是123

在R help中找到如下參考

Warning

If x is a factor, as.numeric will return the underlying numeric (integer) representation, which is often meaningless as it may not correspond to the factor levels, see the ‘Warning' section in factor (and the 2nd example below).

看到meaningless這個(gè)詞了嗎,意思是如果使用as.numeric轉(zhuǎn)換一個(gè)因子,則通常會(huì)返回一個(gè)無(wú)意義的結(jié)果,是因子的一個(gè)“整型數(shù)字象征”,因?yàn)镽為了節(jié)省內(nèi)存提高速度,因子類型底層是用C語(yǔ)言中的int實(shí)現(xiàn)的,因子的值與該整型數(shù)值的“轉(zhuǎn)換表格”存儲(chǔ)在內(nèi)存中。

那么我們?nèi)绾谓鉀Q呢?

嵌套使用

as.numeric(as.character(aaa[1,3]))

這樣返回的就是正常應(yīng)轉(zhuǎn)化的數(shù)值,而不是一個(gè)無(wú)意義的結(jié)果如一百二十三。

但上面的方法有一個(gè)問(wèn)題,在小數(shù)點(diǎn)后位數(shù)太大時(shí)輸出結(jié)果會(huì)四舍五入。

對(duì)于這個(gè),我們可以使用print()函數(shù)中的參數(shù)digit,print(as.numeric(as.character(aaa[1,3])),digits = 16),輸出的就是不帶四舍五入的完整值

理論上format(xx, digits = 16)也可以保證長(zhǎng)度,但我沒(méi)在這種情況下試。

上述內(nèi)容就是使用R語(yǔ)言怎么實(shí)現(xiàn)因子型數(shù)值轉(zhuǎn)數(shù)值型操作,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI