Преобразовать выбранные столбцы данных в коэффициент с помощью цикла? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть датафрейм df. Он содержит факторы по большей части, кроме выбранных числовых столбцов.

Я хочу создать отчет о качестве данных, и все читается как целые числа. Поэтому я собрал следующие индексы столбцов и хотел преобразовать эти столбцы в тип-фактор:

n_cols = c(1,3,4,9:17,28:35)

for (x in length(df)) {
  if (x %in% n_cols == FALSE) {
    df[,x] = as.factor(df[,x])
  }
}

Код выполняется, но он неправильно конвертируется, когда я звоню str(df).

Я пришел из Python, поэтому некоторые из этих синтаксисов новее для меня.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

1) Вы можете сделать это в одну строку с sapply/lapply:

mtcars[,factorCols] <- lapply(mtcars[,factorCols], as.factor)

2) Более длинный вариант: нет необходимости во вложенных for-if; Вы знаете конкретные индексы столбцов столбцов, которые вы хотите преобразовать. Так что прямо итерируйте их уже:

data(mtcars)
factorCols <- c(1,3,5,7)

for (factorCol in factorCols) {
  mtcars[, factorCol] <- as.factor(mtcars[, factorCol])
}

, который по сути является однострочным.

0 голосов
/ 31 августа 2018

Чтобы преобразовать выбранные столбцы в фрейме данных в коэффициенты внутри цикла for Я создал воспроизводимый пример ниже, используя набор данных mtcars.

Примечание: это зависит от указания вектора номеров столбцов, который вы делаете хотите привести к факторам. Если вы хотите инвертировать эту логику, вы можете вставить ! в оператор if (), чтобы отменить логику.

# example data
data(mtcars)

# columns to go to factors
to_fact <- c(1, 3, 5, 7)

for(x in seq_along(mtcars)) {
  if(x %in% to_fact){
    mtcars[,x] <- as.factor(mtcars[,x]) 
  }
}

str(mtcars)
#> 'data.frame':    32 obs. of  11 variables:
#>  $ mpg : Factor w/ 25 levels "10.4","13.3",..: 16 16 19 17 13 12 3 20 19 14 ...
#>  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
#>  $ disp: Factor w/ 27 levels "71.1","75.7",..: 13 13 6 16 23 15 23 12 10 14 ...
#>  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
#>  $ drat: Factor w/ 22 levels "2.76","2.93",..: 16 16 15 5 6 1 7 11 17 17 ...
#>  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
#>  $ qsec: Factor w/ 30 levels "14.5","14.6",..: 6 10 22 24 10 29 5 27 30 19 ...
#>  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
#>  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
#>  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
#>  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Создан в 2018-08-31 пакетом Представ (v0.2.0).

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

mtcars[to_fact] <- purrr::map_df(mtcars[to_fact], as.factor)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...