最近,我四处寻找一种快速的方法来从包含患者数据的宽数据帧中创建一个长数据帧,每个患者有多个测量值(假设最多五天的心率、血压和饱和度评分)。在谷歌搜索时,我曾期望从 tidyverse 和/或 reshape2 包中找到许多解决方案。但是,我实际上是从 base-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))
我不认为有一个单一函数调用的 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句