【问题标题】:creating dummy variable for years多年来创建虚拟变量
【发布时间】:2015-01-29 01:34:21
【问题描述】:

我有一个带有 year 变量 1950-2007 的数据,但是,由于另一列中的“月”变量,每个 year 重复了 12 次。如何创建年份虚拟变量?这就是我所拥有的,R 不接受它

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

【问题讨论】:

  • 你能用一个小数据集展示预期的结果吗?您的标签是单个 string。你期望它是什么?
  • 如果是单个字符串,你甚至不需要cut

标签: r variables cut dummy-data


【解决方案1】:

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

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 到原始数据集,您就可以开始了。

希望这会有所帮助。

【讨论】:

【解决方案2】:

如果预期的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))

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2020-01-31
    • 1970-01-01
    • 2015-01-24
    • 2021-03-07
    • 2019-08-06
    相关资源
    最近更新 更多