【发布时间】:2017-03-20 21:41:15
【问题描述】:
例如我有数据('anscombe.txt'):
case x1 x2 x3 x4 y1 y2 y3 y4
1: 1 10 10 10 8 8.04 9.14 7.46 6.58
2: 2 8 8 8 8 6.95 8.14 6.77 5.76
3: 3 13 13 13 8 7.58 8.74 12.74 7.71
4: 4 9 9 9 8 8.81 8.77 7.11 8.84
5: 5 11 11 11 8 8.33 9.26 7.81 8.47
6: 6 14 14 14 8 9.96 8.10 8.84 7.04
7: 7 6 6 6 8 7.24 6.13 6.08 5.25
8: 8 4 4 4 19 4.26 3.10 5.39 12.50
9: 9 12 12 12 8 10.84 9.13 8.15 5.56
10: 10 7 7 7 8 4.82 7.26 6.42 7.91
11: 11 5 5 5 8 5.68 4.74 5.73 6.89
我想通过以下方式重塑它们:
x1 variable value
1: 10 y1 8.04
2: 8 y1 6.95
3: 13 y1 7.58
4: 9 y1 8.81
5: 11 y1 8.33
6: 14 y1 9.96
7: 6 y1 7.24
8: 4 y1 4.26
9: 12 y1 10.84
... ......
34: 8 y4 6.58
35: 8 y4 5.76
36: 8 y4 7.71
37: 8 y4 8.84
38: 8 y4 8.47
39: 8 y4 7.04
40: 19 y4 5.25
41: 8 y4 12.50
42: 8 y4 5.56
43: 8 y4 7.91
44: 8 y4 6.89
所以,x1 列等于 c(x1,x2,x3,x4),值等于 c(y1,y2,y3,y4)
我如何使用 melt 功能(或 data.table 包中的一些等效功能)来做到这一点?
我试过这个:ansc_new <- melt(anscombe,id.vars = 'x1',measure.vars = c('y1','y2','y3','y4'))
但我不想看到 x1 的最后 11 个值。
【问题讨论】:
-
必须来自data.table吗?
-
@JulianCienfuegos 理想情况下是的。但是,如果没有机会将其保留为 data.table - 其他变体也是可以接受的
-
单独的
x1列是否有原因?根据您接下来的计划,仅使用 2 列来重塑可能更容易(也更常见),因此 x1-x4 也将位于variable列中。 -
如果我理解正确,你可以指定 measure.vars 不同:
melt(DT, id="case", meas=patterns("x", "y"))你可以去掉你不想要的额外列;并且还可以使用 variable.name 来分配不同的 col 名称。
标签: r data.table