Ale*_*lex 5 r reshape reshape2 data.table
我有一个data.table看起来像这样:
id A1g_hi A2g_hi A3g_hi A4g_hi
1 2 3 4 5
...
Run Code Online (Sandbox Code Playgroud)
我想melt这个表,所以它看起来像这样:
id time hi
1 1 2
1 2 3
1 3 4
1 4 5
...
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事:
melt(dtb, measure.vars = patterns("^A"), value.name = "hi", variable.name="time")
Run Code Online (Sandbox Code Playgroud)
哪个不给我想要的东西.我是否需要在这里求助于字符串拆分,或者是否存在data.table执行此操作的本机函数?
42-*_*42- 11
我将我的杯子提升到显然理解基本R reshape功能的@rawr .对我而言,这是一个永恒的谜团,尽管他们在理解其文档方面付出了许多努力,并为解决问题做出了许多努力.尽管我普遍蔑视通过普遍的"非标准化"来"简化"(但对我来说是混淆)R的努力,但我发现他对reshape2::melt函数的发明对于有效操作是一个很大的帮助.
require(reshape2)
> melt(dat, id.var="id")
id variable value
1 1 A1g_hi 2
2 1 A2g_hi 3
3 1 A3g_hi 4
4 1 A4g_hi 5
> str(melt(dat, id.var="id"))
'data.frame': 4 obs. of 3 variables:
$ id : int 1 1 1 1
$ variable: Factor w/ 4 levels "A1g_hi","A2g_hi",..: 1 2 3 4
$ value : int 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
所以:
> dat2[[2]] <- as.numeric(dat2[[2]])
> dat2
id variable value
1 1 1 2
2 1 2 3
3 1 3 4
4 1 4 5
Run Code Online (Sandbox Code Playgroud)