Base R reshape()与tidyverse

时间:2017-06-20 07:31:35

标签: r reshape reshape2 tidyverse

最近,我一直在寻找一种快速方法,从包含患者数据的宽数据框架中创建一个长数据框,每个患者进行多次测量(假设心率,血压和饱和度评分最高为5天)。在谷歌搜索时,我曾期望从tidyverse和/或reshape2包中找到许多解决方案。但是,我实际上从base-R找到了this gem

现在我不能放弃尝试使用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 个答案:

答案 0 :(得分:2)

我认为没有单一函数调用的整体解决方案,但一个好的解决方案也不是那么复杂。我们需要先收集,然后将时间和密钥分开,然后再将其重新传播。

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