2017-02-20 2 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の患者が年間追跡しました。 私はベースラインに1列のcd4値を持ち、もう1列に患者1回につきcd4を繰り返し測定しました。今度は、これら2種類のcd4データをsubject_IDに従って1つの列にまとめて分析したいと考えています。出力は次のようになります。

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に基づくすべてのソリューションは歓迎します。 ありがとうございます。あなたが動的にグループごとにデータフレームを構築するためにgroup_by %>% doを使用することができます

+0

'DF1%>%left_join(= "subject_ID" によってDF2、)' – c0bra

+0

c0bra @お返事に感謝。しかし、私はあなたが私の質問を正しく理解していなかったと思います。あるいは私はそれを明確な方法で入れていませんでした。最初のdfは私の現在のデータフレームです。最初の行を別の列に追加して、分析のためのデータフレームの最終バージョンを作成したいと思います(上記の2番目のdfとして示されています)。これら2つのdfを結合しない。 – Amy

答えて

2

一つのオプション:

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

関連する問題