该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_3和b_4已经被索引1和2.我想要的是根据变量名称的后缀variable包含的列3,3,3,4,4,4.
我能明显做到这一点,"老土"的方式有melt,strsplit,dcast,但是这是一种累赘.我希望一个单线解决方案仍然非常快.
我们可以用 来做到这一点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)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |