I am trying to use reshape function in R to arrange my data timepoints in a table. The variable that I am using to split it is numerical, but when reshape arranges the table it incorrectly puts 2,0.5,4,6,8,0,24...168, instead of 0.0 , 0.5 , 2.0 , 4.0 , 6.0 , 8.0 , 24.0 , 48.0... 168.0
Any help is greatly appreciated. This is my data:
>G2
Animal Sex Time Sugar
1 2001 M 2.0 5880
2 2001 M 0.5 95
3 2001 M 4.0 25100
4 2001 M 6.0 68500
5 2001 M 8.0 110000
6 2001 M 0.0 NA
7 2001 M 24.0 336000
8 2001 M 48.0 476000
9 2001 M 72.0 413000
10 2001 M 96.0 368000
11 2001 M 120.0 332000
12 2001 M 144.0 282000
13 2001 M 168.0 271000
14 2002 M 2.0 13200
15 2002 M 0.5 356
16 2002 M 4.0 55700
17 2002 M 6.0 121000
18 2002 M 8.0 216000
19 2002 M 0.0 NA
20 2002 M 24.0 529000
21 2002 M 48.0 554000
22 2002 M 72.0 468000
23 2002 M 96.0 408000
24 2002 M 120.0 354000
25 2002 M 144.0 348000
26 2002 M 168.0 290000
27 2003 M 2.0 20500
28 2003 M 0.5 1190
29 2003 M 4.0 43800
30 2003 M 6.0 90500
31 2003 M 8.0 142000
32 2003 M 0.0 NA
33 2003 M 24.0 401000
34 2003 M 48.0 485000
35 2003 M 72.0 393000
36 2003 M 96.0 386000
37 2003 M 120.0 335000
38 2003 M 144.0 289000
39 2003 M 168.0 247000
40 2501 F 2.0 6630
41 2501 F 0.5 305
42 2501 F 4.0 28900
43 2501 F 6.0 67300
44 2501 F 8.0 138000
45 2501 F 0.0 NA
46 2501 F 24.0 395000
47 2501 F 48.0 474000
48 2501 F 72.0 390000
49 2501 F 96.0 330000
50 2501 F 120.0 318000
51 2501 F 144.0 258000
52 2501 F 168.0 238000
53 2502 F 2.0 2140
54 2502 F 0.5 NA
55 2502 F 4.0 15700
56 2502 F 6.0 69200
57 2502 F 8.0 125000
58 2502 F 0.0 NA
59 2502 F 24.0 478000
60 2502 F 48.0 500000
61 2502 F 72.0 471000
62 2502 F 96.0 407000
63 2502 F 120.0 414000
64 2502 F 144.0 352000
65 2502 F 168.0 462000
66 2503 F 2.0 32400
67 2503 F 0.5 6290
68 2503 F 4.0 78800
69 2503 F 6.0 119000
70 2503 F 8.0 160000
71 2503 F 0.0 NA
72 2503 F 24.0 328000
73 2503 F 48.0 463000
74 2503 F 72.0 429000
75 2503 F 96.0 381000
76 2503 F 120.0 389000
77 2503 F 144.0 339000
78 2503 F 168.0 327000
I am doing this:
G2r = reshape(G2, direction = "wide",
idvar = c("Animal","Sex"),
times = Time,
timevar = "Time"
)
I am getting this:
> head(G2r)
Animal Sex Sugar.2 Sugar.0.5 Sugar.4 Sugar.6 Sugar.8 Sugar.24 Sugar.48 Sugar.72 Sugar.96 Sugar.120 Sugar.144 Sugar.168
1 2001 M 5880 95 25100 68500 110000 336000 476000 413000 368000 332000 282000 271000
13 2002 M 13200 356 55700 121000 216000 529000 554000 468000 408000 354000 348000 290000
25 2003 M 20500 1190 43800 90500 142000 401000 485000 393000 386000 335000 289000 247000
37 2501 F 6630 305 28900 67300 138000 395000 474000 390000 330000 318000 258000 238000
49 2502 F 2140 NA 15700 69200 125000 478000 500000 471000 407000 414000 352000 462000
60 2503 F 32400 6290 78800 119000 160000 328000 463000 429000 381000 389000 339000 327000
I tried to sort the time and put it as times = sort(unique(G2$Time)), but it doesn't work. I also tried na.omit(Time) and na.omit(Sugar) in case the NAs were producing the issue. But it did not work either.
If you sort the data going into reshape()
it should get the result you need.
G2[order(G2$Animal, G2$Sex, G2$Time), ]
is your data frame in the required order.
G2r = reshape(G2[order(G2$Animal, G2$Sex, G2$Time), ], direction = "wide",
idvar = c("Animal","Sex"),
times = Time,
timevar = "Time"
)
G2r
# Animal Sex Sugar.0 Sugar.0.5 Sugar.2 Sugar.4 Sugar.6 Sugar.8 Sugar.24
# 6 2001 M NA 95 5880 25100 68500 110000 336000
# 19 2002 M NA 356 13200 55700 121000 216000 529000
# 32 2003 M NA 1190 20500 43800 90500 142000 401000
# 45 2501 F NA 305 6630 28900 67300 138000 395000
# 58 2502 F NA NA 2140 15700 69200 125000 478000
# 71 2503 F NA 6290 32400 78800 119000 160000 328000
# Sugar.48 Sugar.72 Sugar.96 Sugar.120 Sugar.144 Sugar.168
# 6 476000 413000 368000 332000 282000 271000
# 19 554000 468000 408000 354000 348000 290000
# 32 485000 393000 386000 335000 289000 247000
# 45 474000 390000 330000 318000 258000 238000
# 58 500000 471000 407000 414000 352000 462000
# 71 463000 429000 381000 389000 339000 327000