将两组两列合并为两行(组中每一列一行)[重复]

问题描述 投票:1回答:1
我有一个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_XEvent_X_succ列投射到该行上而不求和,从而创建新行。 

我了解到here,可以按如下方式对Event_AEvent_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_succEvent_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)

我应该如何解决?
r data.table transpose melt
1个回答
2
投票
我们可以将measurepatterns一起使用

melt(DT, measure = patterns("Event_[AB]$", "Event_[AB]_succ"), value.name = c("Event", "Event_succ"))[, variable := NULL][order(ID)] # ID country year Event Event_succ # 1: 4 NLD 2002 0 0 # 2: 4 NLD 2002 1 0 # 3: 5 NLD 2002 0 0 # 4: 5 NLD 2002 1 1 # 5: 6 NLD 2006 1 1 # 6: 6 NLD 2006 1 1 # 7: 7 NLD 2006 1 1 # 8: 7 NLD 2006 0 0 # 9: 8 NLD 2006 1 0 #10: 8 NLD 2006 1 0 #11: 9 GBR 2002 0 0 #12: 9 GBR 2002 1 0 #13: 10 GBR 2002 0 0 #14: 10 GBR 2002 0 0 #15: 11 GBR 2002 0 0 #16: 11 GBR 2002 1 1 #17: 12 GBR 2006 1 1 #18: 12 GBR 2006 1 1 #19: 13 GBR 2006 1 0 #20: 13 GBR 2006 1 1

© www.soinside.com 2019 - 2024. All rights reserved.