【发布时间】:2021-09-27 19:06:38
【问题描述】:
我对@987654322@ 的行为感到困惑。
我想将 data.table 从宽改成长,similar to this question
这是我的数据表:
dt <- data.table(id=c(1,2,3), varA1=c(2,6,1), varA2=c(1,1,1),varA3=c(1,2,3),
varB1=c(1,0,1), varB2=c(1,1,1),varB3=c(0,0,0))
这就是我想要的:
id index varA
1: 1 1 2
2: 2 1 6
3: 3 1 1
4: 1 2 1
5: 2 2 1
6: 3 2 1
7: 1 3 1
8: 2 3 2
9: 3 3 3
如果我同时包含 varA 和 varB 作为我的度量变量,它可以正常工作,使用:
dt_long <- melt(dt, id.vars = "id", measure=patterns("^varA","^varB"), value.name = c("varA","varB"),variable.name = "index")
输出如预期:
id index varA varB
1: 1 1 2 1
2: 2 1 6 0
3: 3 1 1 1
4: 1 2 1 1
5: 2 2 1 1
6: 3 2 1 1
7: 1 3 1 0
8: 2 3 2 0
9: 3 3 3 0
但是,我只想要varA。只有一个测量变量,它不再起作用。使用
dt_long <- melt(dt, id.vars ="id", measure=patterns("^varA"), value.name = "varA",variable.name = "index")
我明白了:
id index varA
1: 1 varA1 2
2: 2 varA1 6
3: 3 varA1 1
4: 1 varA2 1
5: 2 varA2 1
6: 3 varA2 1
7: 1 varA3 1
8: 2 varA3 2
9: 3 varA3 3
为什么这里的index 变量没有像以前一样列出1、2、3?
【问题讨论】:
-
查看 Ronak 在下方的评论,如果您同意,请编辑您的问题,然后我们可以重新打开它。
标签: r data.table reshape melt