【问题标题】:How to assign value to zero object data.table? R如何为零对象data.table赋值? R
【发布时间】:2014-02-19 10:24:51
【问题描述】:

根据“R中data.table包的FAQs”,你可以创建一个table的模板,如果你有data.table DT,通过DT[0]。但是当我尝试为该列分配一些值时,它不允许我这样做。这是我尝试过的。

Binary.Table = matrix(0, nrow = 7, ncol = 26)
Binary.Table = data.table(Binary.Table)
setnames(Binary.Table, names(Binary.Table), c('JustDay', letters[1:25]))
Binary.Table[, JustDay := c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")]

我需要将此表用作新表的模板。所以,我这样做了

DT.New <- Binary.Table[0]

现在,我的 DT.New 是一个零 obs 数据表。然后我想将一天分配给“JustDay”(或其他)列。我用过

DT.New[, JustDay := c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")]

但它不能以我需要的方式工作。我的代码有什么问题吗?以及如何做到这一点?谢谢。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我看到你已经接受了一个答案,但无论如何......我会这样做:

    ct <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
    setkey(DT.New, JustDay) # need to set the key before using i on the next line
    DT.New[.(ct), nomatch=NA]
         JustDay  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y
    1:    Monday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    2:   Tuesday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    3: Wednesday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    4:  Thursday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    5:    Friday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    6:  Saturday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    7:    Sunday NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
    

    := 旨在更改值通过引用,所以你需要确保有一些东西可以参考(因此nomatch=NA 选项;这是默认值,但我已经包含了它为了清楚起见)。

    【讨论】:

      【解决方案2】:

      我觉得向数据表添加行的方式与用于数据框的方式相同是很棘手的。你可以做这样的事情来让它工作:

      DT.template <- Binary.Table[0]
      setkey(DT.template,JustDay)
      DT.New <- DT.template[J(c("Monday", "Tuesday", "Wednesday", 
                                "Thursday", "Friday", "Saturday", "Sunday")),]
      

      如果键列不是模板的第一列,它将是DT.New 的第一列。为了保留列顺序,您可以执行以下操作:

      numNewLines <- 7  # e.g. number of weekdays
      
      setkeyv(DT.template,colnames(DT.template)[1])
      createKey <- rep(new(typeof(DT.template[[1]]),NA),numNewLines)
      DT.New <- DT.template[J(createKey),]
      

      一旦创建了必要数量的行,您可以以通常的方式再次对它们进行操作,例如

      DT.New[,JustDay:=c("Monday", "Tuesday", "Wednesday", 
                          "Thursday", "Friday", "Saturday", "Sunday")]
      

      【讨论】:

      • 非常感谢。我必须了解更多关于 J() 和另一个函数的信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多