2017-06-20 14 views
0

最近、私は患者ごとに複数の測定値を持つ患者データを含む広いデータフレームから長いデータフレームを作成する簡単な方法を探していました(心拍数、最大5日間の彩度スコア)。私の周りのグーグルでは、tidyverseおよび/またはreshape2パッケージから多数のソリューションを見つけることが期待されていました。しかし、実際にはベースRからthis gemが見つかりました。ベースR reshape()とtidyverse

今や私は、1つ以上のパッケージをティダバースおよび/またはreshape2で使用して、同様に素晴らしい「ワンライナー」を見つけようとしています。これまでのところ、素晴らしいものは何も起きず、ヒントに感謝します。この質問は、実際の解決策を見つけるのではなく、きれいできれいで巧妙な解決策に関するものであることに注意してください。リンクポストから

データ:

id <- paste('x', "1.", 1:10, sep="") 
set.seed(10) 
DF <- data.frame(id, trt=sample(c('cnt', 'tr'), 10, T), work.T1=runif(10), 
    play.T1=runif(10), talk.T1=runif(10), total.T1=runif(10), 
    work.T2=runif(10), play.T2=runif(10), talk.T2=runif(10), 
    total.T2=runif(10)) 

答えて

1

私は1つの関数呼び出しとtidyverse解決策があるとは思わないが、良い解決策はどちらかという複雑ではありません。最初に集めて、時間と鍵を分けてから、もう一度それを広げる必要があります。

DF %>% 
    gather(key, val, -id, -trt) %>% 
    separate(key, c('key', 'time')) %>% 
    spread(key, val) 
 id trt time  play  talk  total  work 
1 x1.1 tr T1 0.86472123 0.53559704 0.27548386 0.65165567 
2 x1.1 tr T2 0.03188816 0.07557029 0.86138244 0.35432806 
3 x1.10 cnt T1 0.35589774 0.50050323 0.80154700 0.83613414 
4 x1.10 cnt T2 0.21913855 0.20795168 0.17015172 0.50528560 
5 x1.2 cnt T1 0.61535242 0.09308813 0.22890394 0.56773775 
6 x1.2 cnt T2 0.11446759 0.53442678 0.46439198 0.93643254 
7 x1.3 cnt T1 0.77510990 0.16980304 0.01443391 0.11350898 
8 x1.3 cnt T2 0.46893548 0.64135658 0.22286743 0.24586639 
9 x1.4 tr T1 0.35556869 0.89983245 0.72896456 0.59592531 
10 x1.4 tr T2 0.39698674 0.52573932 0.62354960 0.47314146 
11 x1.5 cnt T1 0.40584997 0.42263761 0.24988047 0.35804998 
12 x1.5 cnt T2 0.83361919 0.03928139 0.20364770 0.19156087 
13 x1.6 cnt T1 0.70664691 0.74774647 0.16118328 0.42880942 
14 x1.6 cnt T2 0.76112174 0.54585984 0.01967341 0.58322197 
15 x1.7 cnt T1 0.83828767 0.82265258 0.01704265 0.05190332 
16 x1.7 cnt T2 0.57335645 0.37276310 0.79799301 0.45947319 
17 x1.8 cnt T1 0.23958913 0.95465365 0.48610035 0.26417767 
18 x1.8 cnt T2 0.44750805 0.96130241 0.27431890 0.46743405 
19 x1.9 tr T1 0.77077153 0.68544451 0.10290017 0.39879073 
20 x1.9 tr T2 0.08380201 0.25734157 0.16660910 0.39983256 
+0

ああ、それはそれだ、今私はID「嫌なもの」ですVARSを除去することで、実際には1つの見出しの下で全体の残りの多くを収集し収集することを。実現これを分離することができます。私はすでに、どの列が新しい列になるかを指定した解決策を探しすぎていました。 –

関連する問題