2014-03-31 50 views
5

將數據框中的多列從字符轉換爲數字格式的最有效方法是什麼?將多列從字符轉換爲數字格式r

我有一個名爲DF與所有字符變量的數據框。

我想這樣做

for (i in names(DF){ 
    DF$i <- as.numeric(DF$i) 
} 

謝謝

+0

爲什麼他們都字符格式在第一位?我懷疑在過程的早期可以做些什麼來使它們從一開始就是數字。 – Aaron

回答

22

你可以嘗試

DF <- data.frame("a" = as.character(0:5), 
       "b" = paste(0:5, ".1", sep = ""), 
       "c" = letters[1:6], 
       stringsAsFactors = FALSE) 

# Check columns classes 
sapply(DF, class) 

#   a   b   c 
# "character" "character" "character" 

cols.num <- c("a","b") 
DF[cols.num] <- sapply(DF[cols.num],as.numeric) 
sapply(DF, class) 

#   a   b   c 
# "numeric" "numeric" "character" 
+0

[.data.table'(data,nums)中的錯誤: 當我是data.table(或字符向量)時,必須使用'on ='參數指定要連接的列(請參閱?data。表)或鍵入x(即排序,並標記爲排序,請參閱?setkey)。由於x在RAM中排序,鍵控連接可能對超大型數據具有進一步的優勢。 – zsad512

+0

https://stackoverflow.com/questions/48448293/converting-different-columns-to-different-formats?noredirect=1#comment83933268_48448293 – zsad512

2

我想我想通了。這是我做了(也許不是最完美的解決方案 - 如何小鬼建議[羅夫這是非常歡迎)

#names of columns in data frame 
cols <- names(DF) 
# character variables 
cols.char <- c("fx_code","date") 
#numeric variables 
cols.num <- cols[!cols %in% cols.char] 

DF.char <- DF[cols.char] 
DF.num <- as.data.frame(lapply(DF[cols.num],as.numeric)) 
DF2 <- cbind(DF.char, DF.num) 
2

我意識到這是一個古老的線程,但想要發佈一個類似於你對一個函數的請求的解決方案(剛纔碰到類似的問題,我試圖將整個表格格式化爲百分比標籤)。

假設你有一個df,包含5個你想轉換的字符列。首先,我創建一個包含我要處理的列的名稱表:

col_to_convert <- data.frame(nrow = 1:5 
          ,col = c("col1","col2","col3","col4","col5")) 

for (i in 1:max(cal_to_convert$row)) 
    { 
    colname <- col_to_convert$col[i] 
    colnum <- which(colnames(df) == colname) 
     for (j in 1:nrow(df)) 
      { 
      df[j,colnum] <- as.numericdf(df[j,colnum]) 
      } 
    } 

,因爲它通過細胞進入細胞這是不理想的大表,但它會完成這項工作。

0

可以使用的列的索引: data_set[,1:9] <- sapply(dataset[,1:9],as.character)

0

如果您已經使用了tidyverse,這種替換所有數字字符列,並獨自離開休息:

library(dplyr) 
library(magrittr) 

# solution 
dataset %<>% mutate_if(is.character,as.numeric) 

# to test 
str(data.frame(x1 = c('1','2','3'),x2 = c('4','5','6'),stringsAsFactors = F)) 
str(data.frame(x1 = c('1','2','3'),x2 = c('4','5','6'),stringsAsFactors = F) %>% mutate_if(is.character,as.numeric)) 
相關問題