【问题标题】:melt in data.table in r融化在r中的data.table中
【发布时间】:2016-11-10 22:36:56
【问题描述】:

所以我在 R 中使用 data table 工作,大约有 5000 个观察值。我已经将所有这些新的等级变量开发成它们自己的类别(例如grade1、grade2、grade3 等),现在我想将它们组合成一个名为Grade 的变量。我用过这个命令:

DT.m1 = melt(
   MathSummary,
   id.vars = c("Date", "Total.Events", "Unique.Events"),
   measure.vars = c("Gradeprek", "Grade1", "Grade2", "Grade3", "Grade4",
                                 "Grade5", "Grade6", "Grade7", "Grade8",
                                 "Algebra1", "Algebra2", "Geometry", "Precalculus"),
   value.factor=TRUE, na.rm=TRUE
)

但是,当结果出来时,它给了我 65000 次观察。也许它可能已经创建了重复项或其他内容。一分钱你的想法?

【问题讨论】:

  • 13 measure.vars * 5000 = 65000 行。这就是melt 所做的。
  • 您期望的输出是什么?
  • 我希望它仍然有相同的 5000 个观察值,但会在一个名为 Grade 的列中对齐
  • @MarkBornSuccessfulHarris - 我看不出这怎么可能。如果您有一个像df <- data.frame(id=1:3, grade1=4:6, grade2=5:7, grade3=6:8) 这样的简化示例,您的预期结果会如何?
  • 你想要一个组的成绩吗?如"87, 88, 57, 66"?所以单行将所有成绩作为一个元素?

标签: r data.table


【解决方案1】:

我认为您的代码是正确的,您只是不了解 melt 的工作原理。 Melt 将您的数据转换为长格式,看起来您的代码正在运行,因为您有 13 个变量和 5000 个观察值,因此当转换为长格式时,您将获得 13 * 5000 = 65000 个观察值。

但是,在长格式中,不应将一行视为单个观察值,而应将其视为单个度量值实例。所以在长格式中,你会注意到生成的熔化的 data.table 看起来像。

日期 Total.Events Unique.Events 变量值

因此,对于三个度量的每个唯一组合,您将有 13 行,每行将是一个变量 - 值对。

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2021-08-22
    • 2016-06-26
    • 2016-12-31
    • 2014-05-12
    • 2018-08-08
    • 2017-03-30
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多