Как изменить факторные аргументы? (Р) - PullRequest
1 голос
/ 18 апреля 2020

Вот три вектора.

vec1 <- 1:6
vec2 <- c('radio', 'newspaper', 'web-page', 'chat', 'tv', 'web-page')
vec3 <- c(0, 0, 1, 1, 0, 1)

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

'data.frame': 6 obs. of 3 variables:  
$ id : int 1 2 3 4 5 6
$ response: Factor w/ 2 levels "No","Yes": 1 1 2 2 1 2
$ medium : chr "radio" "newspaper" "web-page" "chat" ... 

Вот мое решение.

dfr <- data.frame(id = vec1, response = vec3, medium = vec2, stringsAsFactors = FALSE) 
dfr$response <- factor(x = , levels = , labels = )

Мой вопрос: «Какие значения должны иметь аргументы (x, уровни, метки) и почему?» Говоря об этой строке:

dfr$response <- factor(x = , levels = , labels = )

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Мы можем присвоить labels vec3, так как levels по умолчанию взяты из уникальных значений vec3.

df <- data.frame(id = vec1, response = factor(vec3, labels = c('No', 'Yes')), 
                  medium = vec2, stringsAsFactors = FALSE)

str(df)
#'data.frame':  6 obs. of  3 variables:
#$ id      : int  1 2 3 4 5 6
#$ response: Factor w/ 2 levels "No","Yes": 1 1 2 2 1 2
#$ medium  : chr  "radio" "newspaper" "web-page" "chat" ...

Вы можете прочитать ?factor для более подробной информации.

0 голосов
/ 18 апреля 2020

В этом:

x - это вектор данных, который вы хотите превратить в фактор, в этом случае ответы x=df$response

Levels - это вектор значений, которые x может взяли. По умолчанию это список различных значений x в порядке в порядке возрастания (цифра c или в алфавитном порядке), поэтому значением по умолчанию будет c(0, 1). Вам не нужно включать уровни, поскольку они будут автоматически обнаруживать их, однако, когда вы добавляете метки, рекомендуется добавлять уровни, чтобы ваши метки совпали в случае, если у вас много уровней и вы можете получить заказ перепутано.

Метки могут быть либо одной строкой, либо вектором всех меток для уровней, вы можете использовать метки для сопоставления нескольких значений одной и той же метке. Для вашей задачи вы бы использовали c("No", "Yes"). по умолчанию для меток используются уровни, т.е. нет меток.

Таким образом, ваш окончательный код будет

dfr$response <- factor(x=dfr$response, levels=c(0,1), labels=c("No", "Yes"))

В качестве незначительного отступления люди обычно используют df для представления фрейм данных, а не dfr. Это не имеет никакого значения, это просто общепринятая запись.

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