Использование as.factor для создания нового категориального значения в r - PullRequest
0 голосов
/ 14 апреля 2020

Я не так хорош в кодировании на r, и мне нужна помощь для проекта класса stats. Мне нужно создать новое категориальное значение degOB в r, которое связано со значением POBAD из моей базы данных dd.

degOB = 0 для POBAD <= 30, 1 для 30 <POBAD <= 33, 2 для 33 <POBAD Я должен использовать «as.factor», но я не уверен, как это настроить </p>

Ответы [ 3 ]

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

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

Установите фактор-функцию и введите в нее векторы типа здесь

# Create Ordinal categorical vector 
degree_vector <- c('degOB', 'POBAD', ...)
# Convert `degree_vector` to a factor with ordered level
factor_degree <- factor(degree_vector, order = TRUE, levels =c('degOB', 'POBAD', '', ))
# Print the new variable
factor_degree 

Вариант 2 : намного проще понять, это то, что я делаю

# Step 1 setup your data frame
d <- data.frame(variable = c("degOB", "POBAD", "", ""))

# Step 2 your factor
d$variable.r <- as.integer(as.factor(d$variable))

# Step 3 add a mapping to your degrees fill out the rest
mapping <- c("degOB" = 0, "POBAD"  <= 30, ...)
d$variable.r <- mapping[d$variable]
0 голосов
/ 15 апреля 2020

Вот что я попробовал: dd $ degOB = as.factor (ifelse (dd $ POBAD <= 30, 0, ifelse (30 <dd $ POBAD & dd $ POBAD <= 33, 1, ifelse (dd $ POBAD) > 33, 2, НС))))

и я считаю, что получил правильный ответ. Спасибо за вашу помощь!

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

Простой способ сделать это с помощью cut, как упоминалось @Jaap. Сначала нам нужно создать некоторые данные, аналогичные вашим:

set.seed(42)
POBAD <- sample(25:40, 25, replace=TRUE)
dd <- data.frame(POBAD)

Теперь мы добавим новую переменную:

dd$degOB <- cut(dd$POBAD, breaks=c(0, 30, 33, max(dd$POBAD)))
levels(dd$degOB) <- 0:2
str(dd)
# 'data.frame': 25 obs. of  2 variables:
#  $ POBAD: int  25 29 25 33 34 28 26 34 25 40 ...
#  $ degOB: Factor w/ 3 levels "0","1","2": 1 1 1 2 3 1 1 3 1 3 ...

Это простой способ сделать это. Использование as.factor только усложняет задачу, но если вы хотите это сделать, используйте этот оператор вместо того, чтобы использовать cut.

dd$degOB <- as.factor(ifelse(dd$POBAD <= 30, 0, ifelse(dd$POBAD > 30 & dd$POBAD <= 33, 1, 2)))
...