簡體   English   中英

轉換為數字的有效方法

[英]Efficient Way to Convert to Numeric

我已經將許多列從factor轉換為numeric,但是代碼非常繁瑣。 我必須分別轉換每個列,這最終花費了更多的時間。 這是我使用的代碼(只是一個簡短的示例-我實際上有更多的列):

city1$NY <-as.numeric(levels(city1$NY))[city1$NY]   
city1$CHI<-as.numeric(levels(city1$CHI))[city1$CHI] 
city1$LA <-as.numeric(levels(city1$LA))[city1$LA]   
city1$ATL<-as.numeric(levels(city1$ATL))[city1$ATL] 
city1$MIA<-as.numeric(levels(city1$MIA))[city1$MIA]

我幾乎可以肯定的是,我可以做的只是:

city1[,CityNames]<-as.numeric(levels(city1[,CityNames]))[city1[,CityNames]]

CityNames僅是我要轉換的數據的所有列。但是,這行不通,因為我得到了:

Error in as.numeric(levels(city1[, CityNames]))[city1[, CityNames]] : 
  invalid subscript type 'list'

誰能告訴我我做錯了嗎? 還是除了我漫長而煩人的第一種方法之外,沒有其他簡單的方法可以完成此任務?

我幾乎可以肯定的是,我可以做的只是:

 city1[,CityNames]<-as.numeric(levels(city1[,CityNames]))[city1[,CityNames]] 

因此,需要進行一些小的更改:

city1[,CityNames] <- lapply(city1[,CityNames], function(x) as.numeric(levels(x))[x] )

原始方法無效,因為

  • levels是特定於矢量的,因此尚不清楚myvec = levels(city1[,CityNames])是什么。
  • myvec[ city1[,CityNames] ]引發錯誤,因為city1[,CityNames]是data.frame,因此無法用於子集化。

當我想將data.frame中的許多列轉換為不同的數據類型時,通常會這樣做:

convNames <- c("NY", "CHI", "LA", "ATL", "MIA")
for(name in convNames) { city1[, name] <- as.numeric(as.character((city1[, name])) }

這兩行很不錯,您只需要將要強制轉換的任何列的名稱添加到convNames向量中,即可向下面的強制循環添加新的列。

編輯:做一個因素問題,做上面的lapply方法。

我不確定它是否更快,但可能是因為查找可能會使您減速。 嘗試city1 <- as.numeric(as.character(city1)) as.character()轉換為級別值,然后as.numeric()將這些字符串解釋為其數值等效形式。 由於它不必對每個值的水平向量進行任何查找,因此它可能會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM