通过在R中添加一些额外的列来重塑数据

时间:2018-07-28 10:42:00

标签: r

我已经在这里搜索以找到用于重塑数据的解决方案。不幸的是,我找不到解决方案。数据样本是

id	Group	MKO	AGC	OLO	PKS	Z1
1	5	51	44	23	31	7
2	2	30	33	89	96	6
3	7	44	11	19	20	2

感兴趣的输出是

id	Group	MAOP	code	MZ1	A1	O1	P1
1	5	01-04	0	51	44	23	31
1	5	0	1	7			
2	2	01-04	0	30	33	89	96
2	2	0	1	6			
3	7	01-04	0	44	11	19	20
3	7	0	1	2			

我试图在重塑2中融化,但是我没有成功。 R可以帮我们吗?非常感谢您的建议。

1 个答案:

答案 0 :(得分:1)

您在这里。我没有尝试修饰输出以使其完全匹配您的输出,但这应该给您一个可以在R中完成的想法。而且,我也不建议这是最有效的解决方案。

将您的代码段放入data.frame(通常将从文件而不是文本中读取)。

DF <- read.table(header = TRUE, text =
"id Group   MKO AGC OLO PKS Z1
1   5   51  44  23  31  7
2   2   30  33  89  96  6
3   7   44  11  19  20  2"
)

现在使用两个不同的行结构创建两个数据框,然后进行联接和排序。

df1 <- with(DF, data.frame(id, Group, MAOP="01-04", code=0, MZ1=MKO, A1=AGC, O1=OLO, P1=PKS))
df2 <- with(DF, data.frame(id, Group, MAOP="0", code=1, MZ1=Z1, A1="", O1="", P1=""))
df3 <- rbind(df1,df2)
df3 <- df3[with(df3, order(id, code, row.names(df3))), ]
df3

#  id Group  MAOP code MZ1 A1 O1 P1
# 1  1     5 01-04    0  51 44 23 31
# 4  1     5     0    1   7         
# 2  2     2 01-04    0  30 33 89 96
# 5  2     2     0    1   6         
# 3  3     7 01-04    0  44 11 19 20
# 6  3     7     0    1   2