Как преобразовать столбец фрейма данных в числовой тип? - PullRequest
233 голосов
/ 18 февраля 2010

Как преобразовать столбец фрейма данных в числовой тип?

Ответы [ 16 ]

2 голосов
/ 24 октября 2014

Несмотря на то, что другие достаточно хорошо освещали эту тему, я бы хотел добавить эту дополнительную мысль / подсказку.Вы можете использовать регулярное выражение, чтобы заранее проверить, могут ли символы состоять только из цифр.

for(i in seq_along(names(df)){
     potential_numcol[i] <- all(!grepl("[a-zA-Z]",d[,i]))
}
# and now just convert only the numeric ones
d <- sapply(d[,potential_numcol],as.numeric)

Чтобы получить более сложные регулярные выражения и понять, почему их можно узнать / испытать, посмотрите этот действительно хороший сайт: http://regexr.com/

0 голосов
/ 04 ноября 2018

с хабларом :: конвертировать

Чтобы легко преобразовать несколько столбцов в разные типы данных, вы можете использовать hablar::convert. Простой синтаксис: df %>% convert(num(a)) преобразует столбец a из df в числовой.

Подробный пример

Позволяет преобразовать все столбцы mtcars в символы.

df <- mtcars %>% mutate_all(as.character) %>% as_tibble()

> df
# A tibble: 32 x 11
   mpg   cyl   disp  hp    drat  wt    qsec  vs    am    gear  carb 
   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
 1 21    6     160   110   3.9   2.62  16.46 0     1     4     4    
 2 21    6     160   110   3.9   2.875 17.02 0     1     4     4    
 3 22.8  4     108   93    3.85  2.32  18.61 1     1     4     1    

С hablar::convert:

library(hablar)

# Convert columns to integer, numeric and factor
df %>% 
  convert(int(cyl, vs),
          num(disp:wt),
          fct(gear))

Результат:

# A tibble: 32 x 11
   mpg     cyl  disp    hp  drat    wt qsec     vs am    gear  carb 
   <chr> <int> <dbl> <dbl> <dbl> <dbl> <chr> <int> <chr> <fct> <chr>
 1 21        6  160    110  3.9   2.62 16.46     0 1     4     4    
 2 21        6  160    110  3.9   2.88 17.02     0 1     4     4    
 3 22.8      4  108     93  3.85  2.32 18.61     1 1     4     1    
 4 21.4      6  258    110  3.08  3.22 19.44     1 0     3     1   
0 голосов
/ 12 января 2018

Если в кадре данных есть несколько типов столбцов, некоторые символы, некоторые числовые, попробуйте следующее, чтобы преобразовать только столбцы, содержащие числовые значения, в числовые:

for (i in 1:length(data[1,])){
  if(length(as.numeric(data[,i][!is.na(data[,i])])[!is.na(as.numeric(data[,i][!is.na(data[,i])]))])==0){}
  else {
    data[,i]<-as.numeric(data[,i])
  }
}
0 голосов
/ 27 июля 2017

Чтобы преобразовать символ в число, вы должны преобразовать его в коэффициент, применив

BankFinal1 <- transform(BankLoan,   LoanApproval=as.factor(LoanApproval))
BankFinal1 <- transform(BankFinal1, LoanApp=as.factor(LoanApproval))

Необходимо создать два столбца с одинаковыми данными, поскольку один столбец не может быть преобразован в числовой. Если вы сделаете одно преобразование, вы получите ошибку ниже

transform(BankData, LoanApp=as.numeric(LoanApproval))
Warning message:
  In eval(substitute(list(...)), `_data`, parent.frame()) :
  NAs introduced by coercion

итак, после выполнения двух столбцов с одинаковыми данными применяется

BankFinal1 < transform(BankFinal1, LoanApp      = as.numeric(LoanApp), 
                                   LoanApproval = as.numeric(LoanApproval))

успешно преобразует символ в числовой

0 голосов
/ 15 июня 2017

Учитывая, что могут существовать столбцы с символами, это основано на @Abdou в Автоматическое получение типов столбцов таблицы Excel ответ:

makenumcols<-function(df){
  df<-as.data.frame(df)
  df[] <- lapply(df, as.character)
  cond <- apply(df, 2, function(x) {
    x <- x[!is.na(x)]
    all(suppressWarnings(!is.na(as.numeric(x))))
  })
  numeric_cols <- names(df)[cond]
  df[,numeric_cols] <- sapply(df[,numeric_cols], as.numeric)
  return(df)
}
df<-makenumcols(df)
0 голосов
/ 11 марта 2016

В моем ПК (R v.3.2.3), apply или sapply выдают ошибку. lapply хорошо работает.

dt[,2:4] <- lapply(dt[,2:4], function (x) as.factor(as.numeric(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...