R中的自动虚拟变量

时间:2012-02-23 02:27:11

标签: r data-manipulation data-management

我有以下数据框:

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名的虚拟变量,并将其余部分折叠成一个名为“其他”的最终虚拟。

提前感谢任何帮助或见解。

2 个答案:

答案 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中的必要列。这些都是自动的。默认对比度在第一个因子水平和每个其他水平之间,即所谓的“治疗约束”。其他选择也是可能的。