2015-10-12 123 views
1

我有一個數據幀(稱爲A下面的例子中),看起來像這樣的子集:合併半重複的行

Survey HaulNo Year Species Unsexed Males Females HaulUnique Lat_long 
FRGF  1 2000 134567  NA  4  NA  1_2000  50.7_-2.5 
FRGF  1 2000 134567  NA NA  5  1_2000  50.7_-2.5 
FRGF  2 2003 134578  10 NA  NA  2_2003  49.5_-1.5 
FRGF  3 1998 123557  NA NA  7  3_1998  50.1_-0.5 
FRGF  3 1998 123557  NA  3  NA  3_1998  50.1_-0.5 

我想合併這些行以使它們如下面的數據:

Survey HaulNo Year Species Unsexed Males Females HaulUnique Lat_long 
FRGF  1 2000 134567  NA  4  5  1_2000  50.7_-2.5 
FRGF  2 2003 134578  10 NA  NA 2_2003  49.5_-1.5 
FRGF  3 1998 123557  NA  3  7  3_1998  50.1_-0.5 

從本質上講,我想合併行,以便躺在列「去勢」中的信息,「男性」和「女性」是所有內一排,而不是在目前的情況下該數據是拆分和重複信息出現在多行上,關於相同的物種和拖運等。這是至關重要的當我合併行時,其他所有內容都被維護並保持唯一,因爲每行(合併後)表示一次獨特的拖拽。

我不想對這三列應用任何總和/平均值/其他函數,我想讓所有其他變量保持不變。我也不想創建任何額外的新列,並希望儘可能保留新的列。

注意:鑑於我有一個巨大的數據集,我並不總是知道a)哪些行是半重複的,以及b)每行有哪些Unsexed/Males/Females組合的信息。

我已經嘗試了各種方法來做到這一點,我不得不努力工作,部分原因是作爲RI的初學者一直在努力去真正理解我嘗試過的函數並將它們應用於我的數據(聚合,ddply,cast)。

在此先感謝。

+1

或者使用'data.table',你可以不喜歡'setDT(DF),lapply(.SD,函數(x)的排序(X)[1L]), by =。(Survey,HaulNo,Year,Species,HaulUnique,Lat_long)]' –

+0

嗨大衛,謝謝你的代碼。它運行良好,但它實際上並沒有合併行?它只是重新排列我的數據框右側的Unsexed,Males,Females列... – kmalts

+1

@KatherineMaltby我認爲您的流程存在問題。這兩個解決方案都可以工作,但第二個解決方案使用零取代NA,因爲它使用'sum'函數和'na.rm = T'。 – AntoniosK

回答

2

喜歡的東西

aggregate(
    df[, c("Unsexed", "Males", "Females")], 
    df[, c("Survey", "HaulNo", "Year", "Species", "HaulUnique", "Lat_long")], 
    FUN = sum, 
    na.rm = TRUE 
) 
+0

感謝您的迴應,但是我運行時出現錯誤:[[.data.frame'(A,,c(「Survey」,「HaulNo」,「Year」,「Species」,: undefined選擇的列 – kmalts

+0

確保你使用了正確的data.frame名稱,我假設'df'。此外請確保聚合語句中的名稱與data.frame的列名匹配。匹配意味着相同! – Thierry

+0

Fixed錯誤代碼會運行但不能解決問題,只需在數據框的右側添加無版本,男性,女性列。 – kmalts