R中的自动虚拟变量

Bti*_*rt3 1 r data-manipulation data-management

我有下面的数据框:

temp <- as.data.frame(with(uadm, table(prlo_state_code)))
Run Code Online (Sandbox Code Playgroud)

我期待创建11个虚拟变量.前10名和"其他"各1名.前10名很容易找到:

#top10
temp <- temp[order(temp$Freq, decreasing=T),]
head(temp, n=10)
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢任何帮助或见解.

Vin*_*ynd 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)
Run Code Online (Sandbox Code Playgroud)

如果您绝对需要虚拟变量,可以使用它们创建它们model.matrix.

model.matrix(~y) 
Run Code Online (Sandbox Code Playgroud)