【问题标题】:Error: measure variables not found (data.table::melt)错误:未找到测量变量(data.table::melt)
【发布时间】:2018-09-02 08:44:25
【问题描述】:

我正在关注此处的文档:https://cran.r-project.org/web/packages/data.table/vignettes/datatable-reshape.html 以使用允许同时熔化多个列的更新功能(在 3. 增强(新)功能下)。我遵循了这个例子,这对我来说似乎很简单,并且收到以下错误:

错误:在数据中找不到测量变量:c("p1", "p2", "p3", "p4", "p5"), c("change1", "change2", "change3", "更改4"),c("r1","r2","r3","r4","r5"),c("t1","t2","t3","t4","t5"), c("idle_days1", "idle_days2", "idle_days3", "idle_days4")

这是我正在尝试的代码:

colA = paste("p", 1:5, sep = "")
colB = paste("change", 1:4, sep = "")
colC = paste("r", 1:5, sep = "")
colD = paste("t", 1:5, sep = "")
colE = paste("idle_days", 1:4, sep = "")


data <- data.table::melt(inventory_final, measure = list(colA, colB, colC, 
colD, colE), value.name = c("PriceNum", "PercentChange", "RentedDate", 
"TermDate", "IdleDays"))

当我运行 names(inventory_final) 时,它们肯定在那里(和其他人一起):

p1 p2 p3 p4 p5 change1 change2 change3 change4 r1 r2 r3 r4 r5 t1 t2 t3 t4 t5 idle_days1 idle_days2 idle_days3 idle_days4

对我来说奇怪的是,如果我一次运行一个,每个都会成功执行并产生我所期望的结果:(因此,在数据中找不到的变量似乎不是真正的问题)。

dt <- melt(inventory_final, measure = colA, value.name = "Price")
dt <- melt(inventory_final, measure = colB, value.name = "PercentChange")
dt <- melt(inventory_final, measure = colC, value.name = "RentedDate")
dt <- melt(inventory_final, measure = colD, value.name = "TermDate")
dt <- melt(inventory_final, measure = colE, value.name = "IdleDays")

老实说,我不确定可能出了什么问题。这是一段如此简单的代码,似乎没有任何问题可以解决它。我想知道它们是否属于不同的级别或类型,但是对于我尝试仅熔化那些具有相同数量的级别而没有效果的级别,对于类型,这在文档中被视为非问题。非常感谢任何帮助。

【问题讨论】:

  • inventory_final 是 data.frame 而不是 data.table?你需要传递一个 data.table 否则 data.table::melt 将重定向到 reshape2::melt ,它不允许多个 measure.vars 集,我猜。顺便说一句,使用命令vignette("datatable-reshape") 来查看与安装捆绑在一起的格式更好的小插图。
  • @Frank 我刚刚添加了 setDT 并且它起作用了。数据

标签: r data.table melt


【解决方案1】:

要使用这些增强功能,即使直接调用 data.table::melt,您也需要传递一个 data.table,否则它将重定向到 reshape2::melt

所以OP通过添加setDT解决了它:

data.table::melt(setDT(inventory_final),
  id = "id", 
  measure = list(colA, colB, colC, colD, colE), 
  value.name = c("PriceNum", "PercentChange", "RentedDate", "TermDate", "IdleDays"))

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2022-07-13
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多