Melt:Reshape2 在 R 中返回值作为因子?

Melt:Reshape2 in R returning values as factors?

我有以下格式的堆叠列表:

> Canal
$Canal.Nymph
0d 3d 6d 9d 12d 15d 18d
1 50 30 30 40  30  10   0
2 30 50 30 40  40  20  20
3 40 30 20 30  20   0  10

$Canal.Adult
0d 3d 6d 9d 12d 15d 18d
1 20 30 20 10   0   0   0
2 30 20 30 10   0   0   0
3 40 10  0  0   0   0   0

当应用于 melt:Reshape2 时会给出以下长输出:

 > melt(Canal, id=Canal$value)
    variable value          L1
 1        0d    50 Canal.Nymph
 2        0d    30 Canal.Nymph
 3        0d    40 Canal.Nymph
 4        3d    30 Canal.Nymph
 5        3d    50 Canal.Nymph
 6        3d    30 Canal.Nymph
 7        6d    30 Canal.Nymph
 8        6d    30 Canal.Nymph
 9        6d    20 Canal.Nymph
 10       9d    40 Canal.Nymph
 11       9d    40 Canal.Nymph
 12       9d    30 Canal.Nymph
 13      12d    30 Canal.Nymph
 14      12d    40 Canal.Nymph
 15      12d    20 Canal.Nymph
 16      15d    10 Canal.Nymph
 17      15d    20 Canal.Nymph
 18      15d     0 Canal.Nymph
 19      18d     0 Canal.Nymph
 20      18d    20 Canal.Nymph
 21      18d    10 Canal.Nymph
 22       0d    20 Canal.Adult
 23       0d    30 Canal.Adult
 24       0d    40 Canal.Adult
 25       3d    30 Canal.Adult
 26       3d    20 Canal.Adult
 27       3d    10 Canal.Adult
 28       6d    20 Canal.Adult
 29       6d    30 Canal.Adult
 30       6d     0 Canal.Adult
 31       9d    10 Canal.Adult
 32       9d    10 Canal.Adult
 33       9d     0 Canal.Adult
 34      12d     0 Canal.Adult
 35      12d     0 Canal.Adult
 36      12d     0 Canal.Adult
 37      15d     0 Canal.Adult
 38      15d     0 Canal.Adult
 39      15d     0 Canal.Adult
 40      18d     0 Canal.Adult
 41      18d     0 Canal.Adult
 42      18d     0 Canal.Adult

...除了列 $value 被提供为 class "factor" 外,这没问题。如何直接获取 $value as.numeric 的输出?应用 as.numeric() 给我因子的数值。 这是我第一次遇到这个问题。我的目的 objective 是根据变量将汇总函数(均值、标准差)应用于值。谢谢

我认为没有办法直接在 melt 的调用中执行此操作,但事后您可以试试这个:

df = melt(Canal, id=Canal$value)
df$value = as.numeric(as.character(df$value))

将因子转换为数值将采用因子水平,而您想要的是将因子的标签转换为数值。因此,以下内容也应该有效:df$value = as.numeric(labels(df$value))