【发布时间】:2020-04-11 04:26:13
【问题描述】:
我有一个data.table如下:
DT <- fread(
"ID country year Event_A Event_B Event_A_succ Event_B_succ
4 NLD 2002 0 1 0 0
5 NLD 2002 0 1 0 1
6 NLD 2006 1 1 1 1
7 NLD 2006 1 0 1 0
8 NLD 2006 1 1 0 0
9 GBR 2002 0 1 0 0
10 GBR 2002 0 0 0 0
11 GBR 2002 0 1 0 1
12 GBR 2006 1 1 1 1
13 GBR 2006 1 1 0 1",
header = TRUE)
我想将Event_X AND Event_X_succ 列投射到行上,而不将它们相加,从而创建新行。
我了解到here,我可以为Event_A 和Event_B 执行以下操作:
library(data.table)
melt(DT, id.var = setdiff(names(DT), c("Event_A", "Event_B")),
value.name = 'Event')[, variable := NULL][order(ID)]
或(@IceCreamToucan):
melt(DT, measure.vars = c("Event_A", "Event_B"), value.name = 'Event')[, variable := NULL][order(ID)]
但我想添加第二个值名称 Event_succ 基于另外两列称为 Event_A_Succ 和 Event_B_Succes 并以相同的方式传播它们。
期望的输出:
DT <- fread(
"ID country year Event Event_succ
4 NLD 2002 0 0
4 NLD 2002 1 0
5 NLD 2002 0 0
5 NLD 2002 1 1
6 NLD 2006 1 1
6 NLD 2006 1 1
7 NLD 2006 1 1
7 NLD 2006 0 0
8 NLD 2006 1 0
8 NLD 2006 0 0
9 GBR 2002 1 0
9 GBR 2002 1 0
10 GBR 2002 0 0
10 GBR 2002 0 0
11 GBR 2002 0 0
12 GBR 2002 1 0
13 GBR 2006 1 1
14 GBR 2006 1 1
15 GBR 2006 1 0
16 GBR 2006 1 1",
header = TRUE)
我应该如何解决这个问题?
【问题讨论】:
-
查看 tidyr 包中的 pivot_longer。它具有做你想做的事情的功能
标签: r data.table transpose melt