2017-06-20 70 views
0

最近,我在環顧四周,尋找一種快速方法,可以從包含患者數據的寬數據框中創建長數據框,併爲每位患者提供多次測量(比如心率,血壓,和飽和分數達五天)。儘管我一直在搜索,但我期望能夠從整體和/或重塑2包中找到衆多解決方案。但是,我從base-R實際發現了this gemBase R重塑()與全身反射

現在,我不能放手嘗試使用tidyverse和/或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

我不認爲是一個函數調用一個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「克魯夫特的」瓦爾,居然聚集一個標題下采集到的整個剩餘不少。那可以分離出來。我對於已經指定了哪些列將在哪個新列下進行的解決方案尋找太多了。 –