Как масштабировать функцию "Возраст" в текстовом формате?

Мне нужно масштабировать атрибут "Возраст" из набора данных, который находится в следующем формате. Как сделать масштабирование текстовой переменной в R?

age_upon_outcome
2 weeks
1 month
3 months
1 year
3 weeks
2 months
8 months

2 ответа

Общая норма для обработки текстовых данных - преобразовать их в числовой формат, то есть в полные числа.

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

Если вы переходите по дням, вы, как правило, имеете (учитывая неделю с 7 днями и месяц с 30 днями):

14, 30, 90, .... 

Если вы переходите на недели, вы, как правило, имеете (учитывая месяц с 4 неделями, год с 52 неделями):

2, 4, 12, ... 

Теперь, когда у вас есть их числа, их будет легко масштабировать, например, популярный MinMaxScaling:

MinMaxScaleFeature <- function(x)
{
    return((x - min(x)) /(max(x) - min(x)))
}

Вот так будет выглядеть типичная функция.


Вы также можете использовать другие механизмы масштабирования, такие как Standard или Robust, вы можете проверить их здесь: https://medium.com/@ian.dzindo01/feature-scaling-in-python-a59cc72147c1

require(dplyr)
require(tidyr)

age_upon_outcome <- 
'2 weeks
1 month
3 months
1 year
3 weeks
2 months
8 months'

age_upon_outcome <- strsplit(age_upon_outcome, '\n') %>% unlist 

my_df <- as.data.frame(age_upon_outcome, stringsAsFactors = FALSE) %>%  as_tibble()


my_df %>%  separate(age_upon_outcome, into = c('age', 'unit'), sep = ' ') %>% 
  mutate(unit_in_days = case_when(unit == 'weeks' ~ 7, 
                                  unit == 'month' ~ 30,
                                  unit == 'months' ~ 30,
                                  unit == 'year' ~ 365)) %>% 
 mutate(age = as.numeric(age)*unit_in_days) %>% 
 mutate(scaled_age = (age - mean(age)) /sd(age))

выход

    age unit   unit_in_days scaled_age
  <dbl> <chr>         <dbl>      <dbl>
1    14 weeks             7     -0.769
2    30 month            30     -0.650
3    90 months           30     -0.202
4   365 year            365      1.85 
5    21 weeks             7     -0.717
6    60 months           30     -0.426
7   240 months           30      0.916
Другие вопросы по тегам