#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(",", ".", .))))