在R中操纵变量

时间:2015-07-16 11:40:31

标签: r append

我正在使用R中具有以下格式的数据集:

id  age gender  time1   time2   time3   time4
12  22  0   2   3   2   3
13  35  0   3   4   3   4
14  45  0   4   1   4   1
15  23  0   1   3   5   3
16  67  0   2   2   1   4
17  55  0   4   4   3   2
18  68  1   5   5   4   1
19  90  1   1   6   5   2
20  20  1   3   7   1   2
21  34  1   5   5   3   2

我想以下列方式修改R中的这个数据集:

time    result  id  age gender
time1   2   12  22  0
time1   3   13  35  0
time1   4   14  45  0
time1   1   15  23  0
time1   2   16  67  0
time1   4   17  55  0 
time1   5   18  68  1
time1   1   19  90  1
time1   3   20  20  1
time1   5   21  34  1
time2   3   12  22  0
time2   4   13  35  0
time2   1   14  45  0
time2   3   15  23  0
time2   2   16  67  0
time2   4   17  55  0 
time2   5   18  68  1
time2   6   19  90  1
time2   7   20  20  1
time2   5   21  34  1
time3   2   12  22  0
time3   3   13  35  0
time3   4   14  45  0
time3   5   15  23  0
time3   1   16  67  0
time3   3   17  55  0
time3   4   18  68  1
time3   5   19  90  1
time3   1   20  20  1
time3   3   21  34  1

所以,基本上我在这里所做的就是获得结果,将它们添加到单个列中。结果仍然通过收集它们的时间点,该个体的年龄,身份和性别来确定。

我试过追加,但我没有取得任何成功。

建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

This operation is performed by the gather function of package tidyr. In your case if your data.frame is df1, do

gather(df1, time, result, time1, time2, time3, time4)

答案 1 :(得分:2)

我可能会使用melt中的reshape2

melt(df,id.vars=1:3,value.name="result",variable.name="time")

#    id age gender  time result
# 1  12  22      0 time1      2
# 2  13  35      0 time1      3
# 3  14  45      0 time1      4
# 4  15  23      0 time1      1
# 5  16  67      0 time1      2
# 6  17  55      0 time1      4
# 7  18  68      1 time1      5
# 8  19  90      1 time1      1
# 9  20  20      1 time1      3