为纵向数据框添加第一行?

时间:2017-02-20 14:18:17

标签: r dplyr row longitudinal

以下是数据框:

subject_ID  cd4_time0    other_time  cd4_other_time
1           12            0.5            462
1            12            1.0            140 
1            12            3.0           789
1            12           6.0            100
2            4            0.5            230
2            4            1.0            350
2            4            1.9            450
2            4            3.2            550
3         
3
..

我的数据框简要介绍:超过2k的患者随访数年。 我在基线中有一列cd4值,另一列用每位患者重复测量cd4。现在我想根据subject_ID将这两种类型的cd4数据合并到一列中进行分析。输出应该是这样的:

subject_ID  cd4_time0    other_time  cd4_other_time
1            12             0.5            12
1            12             0.5            462
1            12             1.0            140 
1            12            3.0             789
1            12             6.0            100
2            4             0.5             4
2            4             0.5            230
2            4             1.0            350
2            4             1.9            450
2            4             3.2            550
3         
3
..

欢迎任何基于R的解决方案。  提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以使用group_by %>% do动态构建每个组的数据框的一个选项:

library(dplyr)

df %>% group_by(subject_ID) %>% do ({
# extract and modify the first row
      firstRow <- .[1,]
      firstRow['cd4_other_time'] <- firstRow['cd4_time0']

# bind the first row with the sub data frame . represents a data frame with a unique subject_ID
      bind_rows(firstRow, .)
})

#Source: local data frame [10 x 4]
#Groups: subject_ID [2]

#   subject_ID cd4_time0 other_time cd4_other_time
#        <int>     <int>      <dbl>          <int>
#1           1        12        0.5             12
#2           1        12        0.5            462
#3           1        12        1.0            140
#4           1        12        3.0            789
#5           1        12        6.0            100
#6           2         4        0.5              4
#7           2         4        0.5            230
#8           2         4        1.0            350
#9           2         4        1.9            450
#10          2         4        3.2            550