数据基础操作之长宽数据转换

本次讲解数据的基础操作之长宽数据转换

library(ggplot2)
library(gbmt)
library(JM)
library(dplyr)
library(tidyverse)  
data(pbc2)
colnames(pbc2)

我们加载了pbc的数据,这是肝炎的数据,数据如下图:

可以看到这是典型的纵向数据。

如果我们想看群体胆红素随随访时间的变化轨迹,可利用下面代码:

ggplot(pbc2, aes(x = year, y = serBilir, group = id)) +
  geom_line() +
  labs(title = "traj", x = "Year", y = "BiliL") +
  theme_minimal()

 

下面我们主要关注胆红素,所以尝试以胆红素为核心进行数据的长宽转换

pbc3 <- select(pbc2,'id','year','serBilir')

pbc_with_counts <- pbc3 %>%
  group_by(id) %>%
  mutate(visit_number = row_number()) %>%
  ungroup() 

 

 我们得到pbc_counts表格,可以看到我们生成了visit_number这一列,其中每个数值代表了每个病人随访第几次。我们为什么要这么做?很简单,pbc数据没有具体的固定的的随访间隔,我们只能按照随访次数。

下面进行长宽数据转换时,我们需要去除year列,这一列数据没有规律,几乎没有重复值,不删除的话,无法合并。最后一行代码,把第一列之后的17列数据的列名统一加上‘visit’

pbc_with_counts <- pbc_with_counts[,-2]
pbc_wider <- pbc_with_counts %>% 
  pivot_wider(names_from =visit_number,
  values_from = serBilir)  

colnames(pbc_wider)[-1] <- paste("visit", 1:16, sep = "")

目前为止,我们把胆红素(Y/因变量)转换为宽数据了。现在为了适合trajeR包,我们还需要将时间time转换为宽数据,但问题是,没有固定的随访间隔,怎么办呢?只能采用随访次数。

pbc_with_counts$foll <- pbc_with_counts$visit_number
library(reshape2)
pbc_wider2 <- dcast(pbc_with_counts, id ~ visit_number, value.var = "foll")
colnames(pbc_wider2)[-1] <- paste("time", 1:16, sep = "")

 

然后表格合并

pbc_wider3 <- merge(pbc_wider,pbc_wider2,by='id')

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值