Преобразовать несколько символьных столбцов в цифры c в R - PullRequest
0 голосов
/ 01 мая 2020

С учетом следующего кадра данных:

ks3score ks4score ethnic gender SECshort
28.54   214.00  Indian  Male    Intermediate    
39.84   543.00  Indian  Male    Intermediate    
28.34   294.00  Mixed heritage  Male    Intermediate    
35.78   348.00  Mixed heritage  Male    Intermediate    
35.79   388.00  Mixed heritage  Male    Intermediate    
24.67   504.00  Pakistani   Male    Intermediate    
20.39   70.25   White British   Male    Intermediate    
27.25   92.00   White British   Male    Intermediate    
19.61   104.00  White British   Male    Intermediate    
19.61   150.00  White British   Male    Intermediate

Я хочу преобразовать символьные переменные в числовые c переменные, я использовал приведенный ниже код, но он преобразовал их в NA.

cols <- c("ethnic", "gender", "SECshort")
df[cols] <- lapply(df[cols], factor)
df[, cols]<-lapply(cols, function(x) as.numeric(as.character(df[,x])))

Out:

ks3score ks4score ethnic gender SECshort
28.54   214.00  NA  NA  NA
39.84   543.00  NA  NA  NA
28.34   294.00  NA  NA  NA
35.78   348.00  NA  NA  NA
35.79   388.00  NA  NA  NA
24.67   504.00  NA  NA  NA
20.39   70.25   NA  NA  NA
27.25   92.00   NA  NA  NA
19.61   104.00  NA  NA  NA
19.61   150.00  NA  NA  NA

Интересно, почему я получаю эту ошибку? Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 мая 2020

У вас есть возможность использовать data.table:

library(data.table)
setDT(df)
df[,cols := lapply(.SD, as.numeric), .SDcols = cols]

Вы обновляете по ссылке свое подмножество данных (значение .SD), применяя as.numeric функцию

1 голос
/ 01 мая 2020

Мы можем использовать mutate_at от dplyr

library(dplyr)
df <- df %>%
         mutate_at(vars(cols), as.integer)

Или с across

df <- df %>%
        mutate(across(cols, as.integer))
1 голос
/ 01 мая 2020

Возможно, вы пытались сделать:

df[cols] <- lapply(df[cols], function(x) as.integer(factor(x)))

Вы также можете использовать:

df[cols] <- lapply(df[cols], function(x) match(x, unique(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...