2016-11-17 78 views
0

這是從DF2行之一,添加一行到特定的地方在另一個data.frame

 PERSON_ID EVENT LATERALITY BEHAV EventAge  DATE 
198 10000002174 C569   9  3  64 19890413 

我想插入此行到一個合適的位置DF1,

  PERSON_ID DOB_rev exact_dob  DATE  exact EVENT LATERALITY    BEHAV 
    56 10000002174 4/13/1925  Yes 4/13/1975   Yes BC1   9 Malignant(Invasive) 
    57 10000002174 4/13/1925  Yes 10/13/1975 No_from_age L_B   .     . 
    58 10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV1   .     . 
    59 10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV2   .     . 
    60 10000002174 4/13/1925  Yes 10/13/1993 No_from_age DEATH   .     . 
    61 10000002174 4/13/1925  Yes 6/8/1998   Yes EPI   .     .   

,它必須按照「DATE」變量的順序。所以我想我的輸出是

  PERSON_ID DOB_rev exact_dob  DATE  exact EVENT LATERALITY    BEHAV 
    56 10000002174 4/13/1925  Yes 4/13/1975   Yes BC1   9 Malignant(Invasive) 
    57 10000002174 4/13/1925  Yes 10/13/1975 No_from_age L_B   .     . 
    58 10000002174 4/13/1925  Yes 19890413 No_from_age C569   .     .   
    58 10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV1   .     . 
    59 10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV2   .     . 
    60 10000002174 4/13/1925  Yes 10/13/1993 No_from_age DEATH   .     . 
    61 10000002174 4/13/1925  Yes 6/8/1998   Yes EPI   .     .   

我thinkg各種辦法,但我最終採取的方式過於複雜的路線和未能完成,如服用1排由DF2,嘗試將其添加到DF1和重新排序通過PERSON_ID和DATE。任何人都可以給我任何建議來解決這個問題嗎?

+0

你需要幫助尋找插入或剛與插入正確的地方?你真的想要這樣的混合日期格式嗎?似乎將很難與前進一起工作... – Gregor

+0

理想情況下,您需要首先以獨立於訂單的方式設計數據。這種方式你只需要「綁定」它。 – Bulat

+0

我正在寫一個for循環來解決這個問題,但我認爲我只需要綁定df1和df2,然後按ID和DATE列(在將它們更改爲常用格式後)進行排序。這似乎是非常骯髒的方式,有點打擾原來的df1訂購....但我不能想出更好的主意 – jayinbluecity

回答

0

這將使用lubridate(儘管這不是必須的)。

library(lubridate) 

數據首先閱讀:

lines = '  PERSON_ID EVENT LATERALITY BEHAV EventAge  DATE 
10000002174 C569   9  3  64 19890413' 

df2 <- read.table(text = lines, header = T) 

lines = 'PERSON_ID DOB_rev exact_dob  DATE  exact EVENT LATERALITY    BEHAV 
     10000002174 4/13/1925  Yes 4/13/1975   Yes BC1   9 Malignant(Invasive) 
     10000002174 4/13/1925  Yes 10/13/1975 No_from_age L_B   .     . 
     10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV1   .     . 
     10000002174 4/13/1925  Yes 10/13/1989 No_from_age OV2   .     . 
     10000002174 4/13/1925  Yes 10/13/1993 No_from_age DEATH   .     . 
     10000002174 4/13/1925  Yes 6/8/1998   Yes EPI   .     .' 

df1 <- read.table(text = lines, header = T) 

更改日期格式是相同的(ymdmdylubridate

df1$DATE <- mdy(df1$DATE) 
df2$DATE <- ymd(df2$DATE) 

合併,保留所有行

df <- merge(df1, df2, all = T) 
df <- df[with(df, order(PERSON_ID, DATE)), ] 

最終輸出(改變PERSON_ID字符來匹配你的輸出)

df$PERSON_ID <- as.character(df$PERSON_ID) 
df 
    PERSON_ID  DATE EVENT LATERALITY    BEHAV DOB_rev exact_dob  exact EventAge 
1 10000002174 1975-04-13 BC1   9 Malignant(Invasive) 4/13/1925  Yes   Yes  NA 
2 10000002174 1975-10-13 L_B   .     . 4/13/1925  Yes No_from_age  NA 
3 10000002174 1989-04-13 C569   9    <NA>  <NA>  <NA>  <NA>  64 
4 10000002174 1989-10-13 OV1   .     . 4/13/1925  Yes No_from_age  NA 
5 10000002174 1989-10-13 OV2   .     . 4/13/1925  Yes No_from_age  NA 
6 10000002174 1993-10-13 DEATH   .     . 4/13/1925  Yes No_from_age  NA 
7 10000002174 1998-06-08 EPI   .     . 4/13/1925  Yes   Yes  NA 
相關問題