使用模式融合和转换数据表

dmp*_*dmp 7 r data.table

data.table软件包melt同时为多个列添加了一项新功能.这非常有用,但我无法弄清楚如何保留预熔融变量名称的"后缀".例如:

library(data.table)

# create data table
dt <- data.table(id = seq(3), a_3 = seq(3), a_4 = seq(4, 6), b_3 = seq(7, 9), b_4 = seq(10, 12))

# melt and cast in one step using new feature
m1 <- melt(dt, id.vars='id', measure=patterns("a_", "b_"), value.name=c("a_", "b_"))
Run Code Online (Sandbox Code Playgroud)

结果在数据表中:

   id variable a_ b_
1:  1        1  1  7
2:  2        1  2  8
3:  3        1  3  9
4:  1        2  4 10
5:  2        2  5 11
6:  3        2  6 12
Run Code Online (Sandbox Code Playgroud)

这是"形"我想要的,但变量a_3,a_4,b_3b_4已经被索引12.我想要的是根据变量名称的后缀variable包含的列3,3,3,4,4,4.

我能明显做到这一点,"老土"的方式有melt,strsplit,dcast,但是这是一种累赘.我希望一个单线解决方案仍然非常快.

akr*_*run 4

我们可以用 来做到这一点splitstackshape。它自动给出“.time_1”列

library(splitstackshape)
merged.stack(dt, var.stubs=c("a", "b"), sep="_")
#   id .time_1 a  b
#1:  1       3 1  7
#2:  1       4 4 10
#3:  2       3 2  8
#4:  2       4 5 11
#5:  3       3 3  9
#6:  3       4 6 12
Run Code Online (Sandbox Code Playgroud)