在管道运算符中重新编码字符变量

时间:2018-11-30 01:57:52

标签: r tidyverse recode

我正在尝试根据调查数据集构建逻辑回归模型。我有兴趣查看激励类型(例如,礼品卡)和学生的年级水平(新生,大二等)的影响,以预测他/她是否完成了调查。数据框具有数百个变量,所以我的第一步是仅使用所需的东西,在tidyverse中使用管道运算符执行以下操作:

1)选择四个感兴趣的变量:如果学生完成了调查(完成),校园位置(校园),奖励类型(激励)和每位学生的等级(水平) )。

2)过滤器仅来自一个感兴趣的校园(“史密斯”)和过滤器的响应仅查看三种激励类型,因为“其他”不是很有意义在这种情况下。

我尝试运行模型,但是直到我将字符串重新编码为数字变量(0、1、2 ...)并指定它们为因子后,该模型才起作用。我已经在其他论坛上广泛阅读过,您可以为每个变量使用“ as.factor”和“ recode”。但是对每个变量执行此操作似乎很麻烦,将其分配给新变量,然后将其设置为as.factor。

我是否可以将管道运算符中的字符串重新编码为数字变量(例如,新生= 0,二年级= 1,初中= 2,等等),然后使用as.factor()设置为因子?我尝试在管道操作员中执行此操作,但返回错误消息。还是需要在过滤之前执行这些操作?

有人可以提供任何指针吗?下面是我正在使用的代码:

survey <- read.csv("SURVEY2017.csv")

survey1 <- survey %>% 
  select(FINISHED, CAMPUS, INCENTIVE, LEVEL) %>%
  filter(CAMPUS == "smith") %>%
  filter(INCENTIVE %in% c("A chance to win one of ten $100 Visa     
  gift cards", 
  "A chance to win one of three $500 Visa gift cards",
  "I wanted my opinions to be heard by faculty, staff, and    
  the administration"))

model <- glm(FINISHED ~ INCENTIVE + LEVEL, family = "binomial", 
data = survey1)

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,通常最好为您的问题提供一个最小的工作示例(mwe),其中应包括一个玩具数据集。

根据您的问题,您必须先将变量重新编码为数字,然后再分配为因子。使用dplyr可以有很多方法,但是当要重新编码的类别超过2个时,我真的很喜欢dplyr::case_when()。然后,我用factor()包装它,并指定levelslabels

library(magrittr)
library(dplyr)

data <- data.frame(FINISHED = sample(c('Y', 'N'), 1000, replace = T), 
                   CAMPUS = sample(c("smith", "campus A", "campus B"), 1000, replace = T), 
                   INCENTIVE = sample(c("Gift cards", "Heard by faculty"), 1000, replace = T), 
                   LEVEL = sample(c("freshman", "sophomore", "junior"), 1000, replace =T), 
                   stringsAsFactors = F)

data <- data %>% 
  mutate(LEVEL = factor(dplyr::case_when(
    LEVEL == "freshman" ~ 0,
    LEVEL == "sophomore" ~ 1, 
    LEVEL == "junior" ~ 2
  ), levels = c(0:2), labels = c('freshman', "sophomore", "junior")))

data结构:

> str(data)
'data.frame':   1000 obs. of  4 variables:
 $ FINISHED : chr  "Y" "N" "Y" "N" ...
 $ CAMPUS   : chr  "campus B" "campus A" "smith" "campus B" ...
 $ INCENTIVE: chr  "Gift cards" "Heard by faculty" "Gift cards" "Gift cards" ...
 $ LEVEL    : Factor w/ 3 levels "freshman","sophomore",..: 3 3 2 2 2 1 1 2 2 2 ...