多年来创建虚拟变量

时间:2014-12-01 04:31:15

标签: r variables cut dummy-data

我有一个带有year变量的数据1950-2007,然而,每个year重复12次,因为"月"另一列中的变量。我怎样才能创建一年虚拟变量?这就是我所拥有的而R不接受它

yeardummy <- cut(research$year, br=c(0, 1950:2007), labels=c("1950:2007"))

2 个答案:

答案 0 :(得分:0)

这是我用于在我的数据集中为每年创建多个虚拟变量的函数。

dummyCreator <- function(invec, prefix = NULL) {
     L <- length(invec)
     ColNames <- sort(unique(invec))
     M <- matrix(0L, ncol = length(ColNames), nrow = L,
                 dimnames = list(NULL, ColNames))
     M[cbind(seq_len(L), match(invec, ColNames))] <- 1L
     if (!is.null(prefix)) colnames(M) <- paste(prefix, colnames(M), sep = "_")
     M
} 

#Usage
dummy <- dummyCreator(research$year, prefix = "year")
research <- cbind(research, dummy)

只需将数据集中的变量传递给它,然后将所需的任何前缀传递给它,然后运行,然后cbind到原始数据集,您就可以了。

希望这有帮助。

答案 1 :(得分:0)

如果预期的dummy与@ Amstell的答案类似,我也会这样做

researchNew <- cbind(research, 
       setNames(as.data.frame(model.matrix( ~ 0+factor(year),
        data=research['year'])),paste('year', unique(research$year), sep="_")))

数据

research <- data.frame(year=rep(c(1957:1958), each=12), month=rep(month.abb,2))