第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不丟失信息的情況下將因子轉換為整數(shù)\數(shù)字?

如何在不丟失信息的情況下將因子轉換為整數(shù)\數(shù)字?

慕雪6442864 2019-05-23 11:16:04
如何在不丟失信息的情況下將因子轉換為整數(shù)\數(shù)字?當我將因子轉換為數(shù)字或整數(shù)時,我得到基礎級別代碼,而不是值作為數(shù)字。f <- factor(sample(runif(5), 20, replace = TRUE))##  [1] 0.0248644019011408 0.0248644019011408 0.179684827337041 ##  [4] 0.0284090070053935 0.363644931698218  0.363644931698218 ##  [7] 0.179684827337041  0.249704354675487  0.249704354675487 ## [10] 0.0248644019011408 0.249704354675487  0.0284090070053935## [13] 0.179684827337041  0.0248644019011408 0.179684827337041 ## [16] 0.363644931698218  0.249704354675487  0.363644931698218 ## [19] 0.179684827337041  0.0284090070053935## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218as.numeric(f)##  [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2as.integer(f)##  [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2我不得不求助于paste獲得真正的價值觀:as.numeric(paste(f))##  [1] 0.02486440 0.02486440 0.17968483 0.02840901 0.36364493 0.36364493##  [7] 0.17968483 0.24970435 0.24970435 0.02486440 0.24970435 0.02840901## [13] 0.17968483 0.02486440 0.17968483 0.36364493 0.24970435 0.36364493## [19] 0.17968483 0.02840901有沒有更好的方法將因子轉換為數(shù)字?
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

請參閱以下警告部分?factor

特別是,as.numeric應用于一個因素是沒有意義的,并且可能通過隱式強制發(fā)生。要將因子轉換f為大約其原始數(shù)值,as.numeric(levels(f))[f]建議使用效率稍高一些as.numeric(as.character(f))。

關于R的FAQ 有類似的建議


為什么as.numeric(levels(f))[f]比這更有效as.numeric(as.character(f))

as.numeric(as.character(f))是有效的as.numeric(levels(f)[f]),因此您正在執(zhí)行轉換為數(shù)字length(x)值而不是nlevels(x)值。對于具有較少水平的長向量,速度差異將是最明顯的。如果這些值大多是唯一的,那么速度就沒有太大差異。但是,如果進行轉換,此操作不太可能成為代碼中的瓶頸,因此不要過于擔心。


一些時間

library(microbenchmark)

microbenchmark(

  as.numeric(levels(f))[f],

  as.numeric(levels(f)[f]),

  as.numeric(as.character(f)),

  paste0(x),

  paste(x),

  times = 1e5

)

## Unit: microseconds

##                         expr   min    lq      mean median     uq      max neval

##     as.numeric(levels(f))[f] 3.982 5.120  6.088624  5.405  5.974 1981.418 1e+05

##     as.numeric(levels(f)[f]) 5.973 7.111  8.352032  7.396  8.250 4256.380 1e+05

##  as.numeric(as.character(f)) 6.827 8.249  9.628264  8.534  9.671 1983.694 1e+05

##                    paste0(x) 7.964 9.387 11.026351  9.956 10.810 2911.257 1e+05

##                     paste(x) 7.965 9.387 11.127308  9.956 11.093 2419.458 1e+05


查看完整回答
反對 回復 2019-05-23
?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

R有許多(未記錄的)便利函數(shù)用于轉換因子:

  • as.character.factor

  • as.data.frame.factor

  • as.Date.factor

  • as.list.factor

  • as.vector.factor

  • ...

但令人討厭的是,沒有什么可以處理因素 - >數(shù)字轉換。作為約書亞烏爾里希答案的延伸,我建議用你自己慣用函數(shù)的定義來克服這個遺漏:

as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}

您可以存儲在腳本的開頭,甚至可以存儲在.Rprofile文件中。


查看完整回答
反對 回復 2019-05-23
?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

最簡單的方法是使用unfactorpackage varhandle中的函數(shù)


unfactor(your_factor_variable)

這個例子可以快速入門:


x <- rep(c("a", "b", "c"), 20)

y <- rep(c(1, 1, 0), 20)


class(x)  # -> "character"

class(y)  # -> "numeric"


x <- factor(x)

y <- factor(y)


class(x)  # -> "factor"

class(y)  # -> "factor"


library(varhandle)

x <- unfactor(x)

y <- unfactor(y)


class(x)  # -> "character"

class(y)  # -> "numeric"


查看完整回答
反對 回復 2019-05-23
  • 3 回答
  • 0 關注
  • 942 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號