我想在不包含任何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的列表列 变量。
答案 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'))