【发布时间】:2018-12-03 21:11:02
【问题描述】:
我正在尝试从一长串元素中创建两个新变量,并将它们重新编码为 0 和 1 以在逻辑回归中运行。也就是说,调查中的 OS1 变量表示受访者完成调查的操作系统。我想将移动设备重新编码为“移动设备”,将电脑上的设备重新编码为“PC”。我尝试使用 dplyr::case_when(),但它的行为似乎不像其他变量,我不必对其进行子分类。我的目标是在下面显示的管道运算符中执行此操作。
作为一个例子,我展示了我如何过滤 Campus A 和激励类型。然后我如何使用 dplyr::case_when() 创建三个新的变量列(完成、等级和激励)。
survey <- seru %>%
select(FINISHED, WC001_INCENTIVE, LEVEL, OS1, CAMPUS_Supplemental) %>%
filter(CAMPUS_Supplemental == "Campus") %>%
filter(WC001_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")) %>%
mutate(finished = factor(dplyr::case_when(
FINISHED == "0" ~ 0,
FINISHED == "1" ~ 1
), levels = c(0:1), labels = c("No", "Yes"))) %>%
mutate(grade = factor(dplyr::case_when(
LEVEL == "Freshman" ~ 0,
LEVEL == "Sophomore" ~ 1,
LEVEL == "Junior" ~ 2,
LEVEL == "Senior" ~ 3
), levels = c(0:3), labels = c("freshman", "sophomore", "junior",
"senior"))) %>%
mutate(incentive = factor(dplyr::case_when(
WC001_INCENTIVE == "A chance to win one of ten $100 Visa gift cards" ~
0, WC001_INCENTIVE == "A chance to win one of three $500 Visa gift
cards" ~ 1,
WC001_INCENTIVE == "I wanted my opinions to be heard by
faculty, staff, and the administration" ~ 2
), levels = c(0:2), labels = c("$100 gift card", "$500 gift card",
"Opinion heard")))
这是数据框的结构。再次,我将 FINISHED、LEVEL 和 WC001_INCENTIVE 变异为新变量(“finished”、“grade”和“incentive”)。
str(survey)
'data.frame': 4999 obs. of 8 variables:
$ FINISHED : int 1 1 1 0 1 1 0 1 1 0 ...
$ WC001_INCENTIVE : Factor w/ 6 levels " "," Strongly agree",..: 4
4 4 4 4 3 5 5 4 4 ...
$ LEVEL : Factor w/ 5 levels "","Freshman",..: 3 2 5 2 4
2 5 2 5 2 ...
$ OS1 : Factor w/ 44 levels " ","Android 4.1.2",..: 12
37 34 31 40 31 12 37 37 31 ...
$ CAMPUS_Supplemental: Factor w/ 5 levels "","Campus A","Campus B",..:
3 3 3 3 3 3 3 3 3 3 ...
$ finished : Factor w/ 2 levels "No","Yes": 2 2 2 1 2 2 1 2 2
1 ...
$ grade : Factor w/ 4 levels "freshman","sophomore",..: 3 1 2 1 4 1 2
1 2 1 ...
$ incentive : Factor w/ 3 levels "$100 gift card",..: 2 2 2 2
2 1 3 3 2 2 ...
就像我对“激励”和“等级”所做的那样,我想创建两个新变量“mobile”和“pc”作为 OS1 的子变量——也就是说,将所有移动操作系统合并为一个变量和pc操作系统融为一体。我查看了其他线程,但它们都指向使用 c() 函数创建变量。我需要我的成为 OS1 的子变量,所以想将其包含在上面的管道运算符中。
手机:
c("iPhone", 'Windows Phone 10.0", "Windows Phone 8.1",
"Android 4.1.2", "Android 4.3", "Android 4.4.2", "Android 4.4.4",
"Android 5.0", "Android 5.0.1", "Android 5.0.2", "Android 5.1",
"Android 5.1.1", "Android 6.0", "Android 6.0.1", "Android 7.0",
"Android 7.1.1", "Android 7.1.2")
个人电脑:
"Windows NT 10.0", "Windows NT 5.1", "Windows NT 6.0", "Windows NT
6.1", "Windows NT 6.2", "Windows NT 6.3", "Macintosh"
最终目标是进行逻辑回归,其中 OS1 有两个级别:移动和 PC。也就是说,操作系统(使用您的手机或个人电脑)是否会影响受访者是否完成调查。
提前致谢!
【问题讨论】: