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

#r #dataframe #type-conversion

Вопрос:

У меня есть эти данные

   names(tcars) <- c("MPG",

  "DISPLACEMENT","HORSEPOWER","WEIGHT","ACCELERATION")
     str(tcars) 'data.frame':   38 obs. of  5 variables:  $ MPG         : chr  "16,9" "15,5" "19,2" "18,5" ...  $ DISPLACEMENT: int  350 351 267
  360 98 134 119 105 131 163 ...  $ HORSEPOWER  : int  155 142 125 150
  68 95 97 75 103 125 ...  $ WEIGHT      : chr  "4,36" "4,054" "3,605"
  "3,94" ...  $ ACCELERATION: chr  "2,73" "2,26" "2,56" "2,45" ...
 

Я попытался преобразовать столбец MPG в числовой с помощью следующего запроса и получил сообщение ниже

   MPG <- as.numeric(tcars$MPG) NAs introduits lors de la conversion automatique and the type was not converted
  str(tcars) 'data.frame':  38 obs. of  5 variables:  $ MPG         : chr  "16,9" "15,5" "19,2" "18,5" ...  $ DISPLACEMENT: int  350 351 267
  360 98 134 119 105 131 163 ...  $ HORSEPOWER  : int  155 142 125 150
  68 95 97 75 103 125 ...  $ WEIGHT      : chr  "4,36" "4,054" "3,605"
  "3,94" ...  $ ACCELERATION: chr  "2,73" "2,26" "2,56" "2,45" ...
 

поэтому я попробовал этот код, и все типы символов моих данных изменились на NA 🙁

   tcars[] <- lapply(tcars, function(x) as.numeric(as.character(x))) NAs introduits lors de la conversion automatiqueNAs introduits lors de la conversion automatique NAs introduits lors de la conversion automatique

  str(tcars$MPG)  num [1:38] NA NA NA NA 30 NA NA NA NA 17 ...
  data.frame(tcars$MPG)
  data.frame(tcars$DISPLACEMENT)

  str(tcars) 'data.frame':  38 obs. of  5 variables: 
  $ MPG         : num  NA NA NA NA 30 NA NA NA NA 17 ...  $ DISPLACEMENT: num  350 351   267 360 98 134 119 105 131 163 ...  $ HORSEPOWER  : num  155 142 125    150 68 95 97 75 103 125 ...  $ WEIGHT      : num  NA NA NA NA NA NA NA NA NA NA ...  $ ACCELERATION: num  NA NA NA NA NA NA NA NA NA NA ...
 

Комментарии:

1. Пожалуйста, добавьте данные dput и удалите код > перед вставкой.

2. используйте dput, чтобы показать свой пример

3. Используете ли вы запятую ( , ) в качестве десятичной? На самом 2,73 деле 2,73 ?

Ответ №1:

Замените запятые перед преобразованием данных в числовые.

 tcars[] <- lapply(tcars, function(x) as.numeric(sub(',', '.', x)))
tcars

#   MPG HORSEPOWER WEIGHT
#1 16.9        155  4.360
#2 15.5        142  4.054
#3 19.2        125  3.605
#4 18.5        150  3.566
 

Это предполагает, что числа, подобные "16,9" и "15,5" на самом деле равны 16,9 и 15,5 соответственно.

данные

 tcars <- data.frame(MPG = c("16,9", "15,5", "19,2", "18,5"), 
                    HORSEPOWER = c(155, 142, 125, 150), 
                    WEIGHT = c("4,36", "4,054", "3,605", "3,566"))
 

Ответ №2:

Решение dplyr :

 tcars %>%
  mutate(across(everything(), ~as.numeric(sub(",", ".", .))))