首页 > 解决方案 > 在 R 中跨时间点重塑数据

问题描述

我想根据他们的访问水平查看感兴趣的变量(身高、体重和血压)。

这是原始数据集:

attempt = data.frame( ID = c(rep("S1",3),rep("S2",3)),
             visit = rep(seq(1:3),2),
             height = c(154,155,156,150,152,158),
             weight = c(54,56,57,60,62,70),
             BP = c(140,120,160,170,180,190))

原始数据

原始数据

我尝试了下面的 reshape 命令,但输出看起来很奇怪。

data2 <- reshape(attempt, timevar="visit", idvar="ID", direction="wide")

重塑命令后

重塑命令后

关于为什么我的输出没有显示的任何想法?谢谢

我想要的列标题输出是:

ID 身高.1 身高.2 身高.3 体重.1 体重.2 体重.3 BP.1 BP.2 BP.3

我希望根据他们在水平列中的访问对每个 ID 的身高、体重和 BP 进行排序。

标签: r

解决方案


使用-package 中dcast()data.table,这变得非常简单:

library(data.table)
#make a data.table out of 'attempt'
data.table::setDT(attempt)
#cast to desired wide format
data.table::dcast( attempt,
                   ID ~ visit,
                   value.var = c( "height", "weight", "BP" ) )

#    ID height_1 height_2 height_3 weight_1 weight_2 weight_3 BP_1 BP_2 BP_3
# 1: S1      154      155      156       54       56       57  140  120  160
# 2: S2      150      152      158       60       62       70  170  180  190

推荐阅读