【发布时间】:2018-01-11 15:19:52
【问题描述】:
respect$BB6_cat5_0 <- ifelse(respect$BB6_cat5 == 1, 1, 0)
respect$BB6_cat5_1 <- ifelse(respect$BB6_cat5 == 2, 1, 0)
respect$BB6_cat5_2 <- ifelse(respect$BB6_cat5 == 3, 1, 0)
respect$BB6_cat5_3 <- ifelse(respect$BB6_cat5 == 4, 1, 0)
respect$BB6_cat5_4 <- ifelse(respect$BB6_cat5 == 5, 1, 0)
respect$J1A_cat2_0 <- ifelse(respect$J1A_cat2 == 1, 1, 0)
respect$J1A_cat2_1 <- ifelse(respect$J1A_cat2 == 2, 1, 0)
变量的类别长度不同,虚拟变量的命名对我的项目非常重要。
我尝试了以下方法,但由于 model.matrix 的工作原理,这忽略了引用变量。
dummy.fun<-function(data) {
data_factor<-data.frame(lapply(data,as.factor))
names(data_factor)<-paste0(names(data_factor),'_')
data_all<-data.frame(model.matrix(~.+0,data=data_factor))
}
dummy.fun(respect)
但是,除非它是数据集中的第一个变量,否则这不会给我 BB6_cat5_0。有什么想法可以让这个函数输出所有虚拟变量,甚至是所指对象?
【问题讨论】:
-
请提供一个最小的工作示例,即数据、代码和预期输出。
-
我不认为该代码永远会为您提供 BB6_cat5_0,因为“_”之后没有参数,并且 R 索引从 1 开始,而不是 0。跨度>
-
看起来您想要的正是
model.matrix给出的内容,但名称不同。只需修改名称而不是编写所有这些ifelse语句。如果您发布示例输入,我们可以提供帮助/
标签: r function dummy-variable