1

我有以下创建的数据框:

temp <- as.data.frame(with(uadm, table(prlo_state_code)))

我正在寻找创建 11 个虚拟变量。前 10 名各一个,“其他”各一个。可以通过以下方式轻松找到前 10 名:

#top10
temp <- temp[order(temp$Freq, decreasing=T),]
head(temp, n=10)

我知道 R 很棒,所以我假设有一个易于自动创建(和命名)前 10 名的虚拟变量并将其余部分折叠成一个名为“其他”的最终虚拟变量。

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

4

2 回答 2

6

您很少需要虚拟变量——R 默默地为您创建它们。

如果你只是想把所有不在前 10 的类放在一起,你可以简单地使用ifelseand %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) 
于 2012-02-23T02:45:13.403 回答
3

当在公式中输入因子分类变量时,R 的回归函数将构成 model.matrix 中的必要列。这都是自动的。默认的对比是在第一个因子水平和其他每个水平之间,即所谓的“治疗对比”。其他选择是可能的。

于 2012-02-23T02:53:05.990 回答