我的数据包括四个基本要素:ID、时间、暴露、结局
我想绘制我的暴露和结果之间的散点图,但我的暴露的关注时间点与结果的关注时间点不同,因此有些ID在该结果时间点没有任何评估。我想做的是创建一个数据子集,每个ID作为一行。那么在时间-1的暴露和在时间-3的结果,但是如果ID不存在,这里是一个数据的例子:
ID <- c(1,1,2,2,2,3,3,3,4,4)
exposure <-c(1.2, 1.3, 1.4, 1.5, 2.1, 2.2, 3.2, 4.2, 5.2, 6.2)
outcome <-c(0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 2.1, 3.1)
Time<-c("time_1","time_2","time_1","time_2","time_3","time_1","time_2","time_3","time_1","tme_2")
data <-data.frame(ID,exposure,outcome,Time)
我这样做的原因是因为散点图是一个横截面图,因此如果我只是根据每个ID的时间绘图,图将是空的,因为每行中没有暴露在时间1和结果在时间3的配对,这就是为什么我需要创建数据子集并自己制作配对。
我试过这些代码:
# so you see the empty cells and the reason of getting an empty plot
df <- data |> pivot_wider (name_from = Time, values_from = c(exposure,outcome))
#subsetting the data to only my desired time points (this helps me to see in my actual # data which IDs are actually not having an assessed time point
df1 <- data %>%
group_by(ID)%>%
filter(data, Time=="time_1" | Time=="time_3")%>%
ungroup()
# And eventually subsetting the data based on different timepoint to then merge them #together
df2 <- filter (data, Time=="time_1")
df3 <- filter (data, Time=="time_3")
但是在最后一个代码中,你可以看到两个数据集的大小是不同的,除此之外,我还需要指出,例如,ID=1,在time_3,结果为NA,所以我不想只对ID进行子集化,因为两个值都可用。
所以我最终想要的数据集,需要具有以下结构:
ID exposure_time_1 outcome_time_3
----------------------------------
1 1.2 NA
2 1.4 0.4
3 2.2 0.1
4 5.2 NA
有人对此有什么解决办法吗?
1条答案
按热度按时间k5ifujac1#
你就快成功了。你后面的列就行了。
您的数据集在这里不需要它,但是我添加了
filter
以确保最后两列中至少有一列是非空的。