最近,我四处寻找一种快速的方法,从包含多个病人数据的宽数据框架中创建一个长数据框架(假设心率、血压和饱和度评分最多可持续5天)。在谷歌搜索时,我希望从tidyverse和/或reshape2包中找到许多解决方案。然而,我实际发现的this gem来自于base。
现在,我不能放弃尝试使用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))发布于 2017-06-20 08:13:24
我认为没有一个函数调用的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
https://stackoverflow.com/questions/44646602
复制相似问题