0

我的数据框中有 167 个虚拟变量以及其他变量。为了创建一个新的预测数据,我希望将第一个虚拟变量的值更改为 1,并将所有其他变量的值替换为零。我的虚拟变量被称为 District_code2、 District_code3、 District_code4 等等。所以我想修复 District_code2 取值 1 和所有其他取值 0。

我使用因子创建了这些虚拟变量,并使用 model.matrix 将它们添加到我的数据中

 dummies = data.frame(model.matrix(~district_code, data=data_wht_81_09))
 #to get rid of the intercept
 dummies1<-dummies[,-1]

我需要在我的数据中包含假人,因为在我运行回归之后,我不希望在我的预测中考虑所有假人的系数。我想绘制关于一个变量的拟合值,将所有其他变量保持在其平均值。对于地区假人,这意味着向所有拟合值添加一个常数。因此,我想将所有其他虚拟变量的值设置为 0。可能有更有效的方法来做到这一点。下面我将展示对象虚拟变量的示例。

 dput(head(dummies1,4))
 structure(list(district_code2 = c(0, 0, 0, 0), district_code3 = c(0, 
 0, 0, 0), district_code4 = c(0, 0, 0, 0), district_code5 = c(0, 
 0, 0, 0), district_code6 = c(0, 0, 0, 0), district_code7 = c(0,0, 0, 0), 

我只显示前 6 个变量。我怎样才能做到这一点?提前谢谢了。

4

1 回答 1

1

很少需要自己操作虚拟变量(当您使用因子时,R 在幕后进行操作),但是,如果绝对需要,您可以简单地识别名称以 开头的列discrict_code,并更改它们的值:其他列将是保持原样。

d <- data.frame( 
  district_code2 = c(0, 0, 0, 0), 
  district_code3 = c(0, 0, 0, 0), 
  district_code4 = c(0, 0, 0, 0), 
  district_code5 = c(0, 0, 0, 0), 
  district_code6 = c(0, 0, 0, 0), 
  district_code7 = c(0,0, 0, 0), 
  x = 1:4
)
library(stringr)
d[,str_detect(names(d), "^district_code[0-9]+")] <- 0
d[,1] <- 1
d
于 2013-04-16T17:15:07.360 回答