熔化data.table时如何指定空的id.vars向量?

时间:2019-11-13 02:47:51

标签: data.table melt

我想在不包含任何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,也可以作为度量变量。

     

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

2 个答案:

答案 0 :(得分:3)

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())

答案 1 :(得分:1)

或者,您可以将melt之前的列作为子集:

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