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))
我有以下格式的堆叠列表:
> 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))