首页 > 解决方案 > 熔化 data.table 时如何指定一个空的 id.vars 向量?

问题描述

我想在不包含任何 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)]

但我原以为它应该在融化呼叫本身内是可能的?我已经尝试了以下但没有成功。

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 变量的列表列。

标签: rdata.tablemelt

解决方案


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

推荐阅读