преобразовать chr в цифру c apply () для обновления столбца цифр c из функции применения - PullRequest
0 голосов
/ 10 марта 2020

Контекст проблемы: замените переменную chr во фрейме данных, преобразовав chr в цифру c. Используйте функцию для chr в цифру c, затем примените () к передаче в df_credit_status $ length_of_service для преобразования в цифру c и для обновления этого же столбца фрейма данных, например, df_credit_status $ length_of_service.

У меня есть эта функция и функция apply ().

Поле столбца фрейма данных: df_credit_status $ length_of_service - это chr, для этого обновления мне, возможно, потребуется создать новое поле и затем переместить / скопировать этот результат в df_credit_status $ length_of_service после изменения типа данных.

fun_year <- function(length) { as.numeric(gsub("[A-Za-z]|[[:punct:]]|\\s+", "", length))}

df_credit_status$length <- apply(df_credit_status$length_of_service, FUN=fun_year)

Ошибка в apply (): dim (x) должна иметь положительную длину.

dput () имеет эти данные из df_credit_status $ length_of_service

"< 1 year", "2 years", "3 years", "4 years", "5 years", "6 years", "7 years", "8 years", "9 years", "10+ years"

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Поскольку созданная вами функция отлично работает с векторами, нам не нужно использовать sapply:

df_credit_status$length <- fun_year(df_credit_status$lenght_of_service)

Возвращает:

   lenght_of_service length
1           < 1 year      1
2            2 years      2
3            3 years      3
4            4 years      4
5            5 years      5
6            6 years      6
7            7 years      7
8            8 years      8
9            9 years      9
10         10+ years     10
1 голос
/ 10 марта 2020

Зачем вам вообще нужна функция apply? Вы можете просто использовать свою функцию напрямую:

df_credit_status <- data.frame(length_of_service = c("1 year", "2 years", "3 years", "4 years", "5 years", "6 years", "7 years", "8 years", "9 years", "10+ years"))

fun_year <- function(length) {as.numeric(gsub("[A-Za-z]|[[:punct:]]|\\s+", "", length))}

df_credit_status$length <- fun_year(df_credit_status$length_of_service)

df_credit_status
   length_of_service length
1             1 year      1
2            2 years      2
3            3 years      3
4            4 years      4
5            5 years      5
6            6 years      6
7            7 years      7
8            8 years      8
9            9 years      9
10         10+ years     10
...