我有以下数据框:
temp <- as.data.frame(with(uadm, table(prlo_state_code)))
我期待创建11个虚拟变量。前10名和“其他”各1名。前10名很容易找到:
#top10
temp <- temp[order(temp$Freq, decreasing=T),]
head(temp, n=10)
我知道R很棒,所以我假设有一个很容易自动创建(和命名)来自前10名的虚拟变量,并将其余部分折叠成一个名为“其他”的最终虚拟。
提前感谢任何帮助或见解。
答案 0 :(得分:6)
你很少需要虚拟变量--R会默默地为你创建它们。
如果您只想将所有不在前10名的课程放在一起,
您只需使用ifelse
和%in%
。
x <- sample( LETTERS, 1e4, replace=TRUE, p=runif(26) )
top10 <- names( sort(table(x), decreasing=TRUE)[1:10] )
y <- ifelse( x %in% top10, as.character(x), "Rest" )
table(y)
如果您绝对需要虚拟变量,可以使用model.matrix
创建它们。
model.matrix(~y)
答案 1 :(得分:3)
当在公式中输入因子分类变量时,R的回归函数将构成model.matrix中的必要列。这些都是自动的。默认对比度在第一个因子水平和每个其他水平之间,即所谓的“治疗约束”。其他选择也是可能的。