【问题标题】:How to specify an empty id.vars vector when melting a data.table?熔化 data.table 时如何指定一个空的 id.vars 向量?
【发布时间】:2020-03-08 19:23:13
【问题描述】:

我想融合一个不包含任何 ID 列的 data.table。

dt <- data.table::data.table(iris)[1:10]
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'))

如果不指定 id.vars,所有非 measure.vars 列都被视为 id.vars。这可以在事后通过仅从熔体中选择变量/值来处理。

例如,下面的代码会产生我正在寻找的输出:

data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'))[,.(variable, value)]

但我原以为它应该在melt call 本身中是可能的?我已经尝试了以下方法,但没有成功。

data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=NULL)
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=c())
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=list())

来自文档:

如果 id.vars 和 measure.vars 都缺失,则所有 非数字/整数/逻辑列被分配为 id 变量和 其余的作为测量变量。如果只有 id.vars 或 measure.vars 之一 提供,其余列将分配给另一个。 id.vars 和 measure.vars 可以多次拥有同一列 并且同一列可以同时作为 id 和 measure 变量。

melt.data.table 还接受 id 和 measure 的列表列 变量。

【问题讨论】:

    标签: r data.table melt


    【解决方案1】:

    c() 和NULL 相同(例如identical(c(), NULL) == TRUE),NULL 是在内部分配给id.vars 的值,当它缺失时。

    但是,一个空整数或字符向量可以解决问题:

    data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=integer())
    data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=character())
    

    【讨论】:

      【解决方案2】:

      或者,您可以对melt 之前的列进行子集化:

      melt(dt[, c('Petal.Length', 'Petal.Width')], measure.vars=c('Petal.Length', 'Petal.Width'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 2018-03-29
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-16
        相关资源
        最近更新 更多