Rでパネルデータを扱っているのですが、データフレームで

ID Q1 Q3 Q6 Q8 Q11 Q13 Q16 Q18 Q33 Q34 Q128 Q137 …
1    1  22   3  32   NA   NA   NA   NA
1    1  23   3  33    7    4   NA   NA
1    …
2    2  27   5   8
2    2  28   5   9
2
2
2
2
2
3
4
4
5
5
5
5
5
7
7

のようになっています。
Q1とQ3、Q6とQ8、…は同じ個体です。前者が属性、後者が年齢です。
またQ18のあとの…は他のデータが入っています。
この時、IDごとに属性1のデータだけ、属性3のデータだけ、…を抽出するにはどのようにしたらよいでしょうか?
属性1が含まれるデータ全て、属性1が含まれるデータのうち最新のものだけ、どちらも知りたいですが後者のほうがより重要です。
よろしくお願い致します。

追記
dplyrでselectを使ったり一度Q1,Q3とかQ6,Q8でまとめて処理後に分解するとかIDでinner joinして後でtydirでバラすとか考えましたがどれもうまくいきそうにないので悩んでいます。
また、Q18以降のカラムにはたくさんデータが入っています。(型は整数でNAもあります)

欲しいデータは以下の様な感じです。numが条件です。yearが年齢です。

ID num year Q33 Q34 Q128 Q137 ...
1    1   24  22  99   45    6
4    1   36  22  99   NA    2
5    1   14  48   0   77    7
7    1   24  24   0   52    1
22   1   30  22  99   32    6
 ...

再追記
sqldfを使ってSQL形式で同じ処理ができないか、という方向で考えています。
良い知恵のある方よろしくお願い致します。

データ例

ID,Q1,Q3,Q6,Q8,Q11,Q13,Q16,Q18,Q33,Q34,Q128,Q137,Q299
50,1,39,2,14,3,12,8,68,5,0,90,90,0
50,1,40,2,15,3,13,8,69,7,0,84,84,0
50,1,16,NA,NA,NA,NA,NA,NA,9,0,100,100,0
51,1,38,2,13,3,12,NA,NA,4,3,0,0,0
51,1,39,2,14,3,13,NA,NA,7,0,36,36,0
51,1,40,2,15,NA,NA,NA,NA,6,0,59,59,0
51,1,41,2,16,3,15,NA,NA,7,0,86,86,0
51,1,42,2,17,3,16,NA,NA,6,0,80,80,0
52,1,40,2,13,3,7,NA,NA,0,0,0,0,0
52,1,41,2,14,3,8,NA,NA,0,0,0,0,0
53,1,34,2,5,3,5,8,59,0,0,0,0,0
53,1,35,2,6,3,6,8,60,4,0,0,0,0

Q1は全て1に見えますが他の個体で2や6から始まるものもあります。
そのため、1のデータだけ、2のデータだけ欲しくてもカラムごとに条件設定できず困っています。
2のカラムとその右隣のカラムのみ残せる、もしくはdplyrのmutateでQ1~Q18の中で
属性1のものとその年齢を右につけるパターンを現在考え中です。知恵のある方、ヘルプお願い致します。