R - преобразовать столбцы данных в числовые - NA, введенные из-за ошибки приведения - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь выполнить код отсюда:

Измените класс с множителя на числовой для многих столбцов в кадре данных

в кадре данных с 140столбцы

cols = c(1:140);    
merged_dataset[,cols] = apply(merged_dataset[,cols], 2, function(x) as.numeric(as.character(x)));

проблема в том, что для некоторых столбцов я получаю NA. Есть ли способ как-то исключить эти столбцы из кода, чтобы я сохранил данные, и они не превратились в NA? Я вижу, что тип этих столбцов является символом, если это помогает.

Ответы [ 2 ]

1 голос
/ 17 октября 2019

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

cols <- c(1:140)         # all columns
cols.skip <- c(1,3,5,21) # columns which CAN'T be converted to numeric
cols.keep <- cols[!cols %in% cols.skip]
merged_dataset[,cols.keep] <- apply(merged_dataset[,cols.keep], 2, function(x) {
    as.numeric(as.character(x))
})

Чтобы реализовать аналогичную логику, используя имена столбцов, а не индексы:

cols.skip <- c("a", "b", "c")
cols.keep <- !(names(merged_dataset) %in% cols.skip)
merged_dataset[,cols.keep] <- apply(merged_dataset[,cols.keep], 2, function(x) {
    as.numeric(as.character(x))
})
0 голосов
/ 17 октября 2019

Подстановка любых неподходящих символов внутри уровней факторов также может происходить для лучшего извлечения любых чисел:

convert_factors_to_numeric <- function(df) {

  as.data.frame(lapply(df,
                       function(x) {

                         if (is.factor(x)) {

                           as.numeric(as.character(trimws(x),
                                        which = "both"))

                         } else{

                           x

                         }
                       }
                     ),

                stringsAsFactors = FALSE)

}

df_converted <- convert_factors_to_numeric(df) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...