2017-02-20 27 views
1

Вот кадр данных выглядит как:Добавление первой строки по группам для продольного кадра данных?

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 на пациента. Теперь я хотел бы объединить эти два типа данных cd4 в соответствии с subject_ID в один столбец для моего анализа. Выход должен быть таким:

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 приветствуются. Спасибо заранее.

+0

'df1%>% left_join (df2, по = "subject_id")' – c0bra

+0

@ c0bra Большое спасибо за Ваш ответ. Но я думаю, что вы не поняли мой вопрос правильно или я не дал его в ясной форме. Первый df - это мой текущий фрейм данных. Я хотел бы добавить первые строки в другой столбец, чтобы сделать окончательную версию фрейма данных для моего анализа, указанную как второй df выше. Не объединяйте эти два df. – Amy

ответ

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 
+1

Большое вам спасибо. Он работает очень хорошо для моих данных. – Amy