2017-06-15 130 views
-1

我有幾列重複行的數據集(基於名稱ProjectID複製一列)。刪除重複的行,同時總結一列並保留其他列

我想刪除重複的行並保留其中的一個。 但是,這些行中的每一行都有一個單獨的金額值,需要對最終合併行進行彙總和存儲。

我已經使用了聚合函數。但它會刪除所有其他列(按我所知的用法)。 有人請告訴我一個更簡單的方法。

附加示例數據集。 dataset

+3

見包'group_by'和''summarise' dplyr' –

+0

請加'dput(頭(your_data,20))'來描述,你試過 –

+0

謝謝你什麼。我對dplyr的一部分或其用法不瞭解。 – Sushant

回答

0

這可以使用dplyr來解決@PLapointe指出。如果你的數據集被稱爲df那麼這將作爲

df %>% 
group_by(`Project ID`, `Project No.`, `Account Head`, `Function`, `Functionary`) %>% 
summarise(cost.total = sum(Amount)) 

這應該這樣做。您還可以調整要保留的變量。

+0

謝謝。但是,我正面臨着這些問題。 1. Project_Id未被識別。實際列名是項目ID。那麼我如何使用它的空間部分。 2. group_by需要所有這些變量是相同的,只保留這些? 例如:說明不同。我也需要保留它們。 – Sushant

+0

我更新了問題的第一部分。現在對於第二部分,你是否需要'group_by'描述,或者你對總數有好處,你需要'將它連接到原始數據集? – akash87

+0

Duplicate_remove dataGP_unique < - dataGP_cleaned%>% + group_by('ProjectID','Project No.','Voucher','Account Head Description','Acc Head','Function ','Functionary','Description')%>% +總結(cost.total =總和(金額)) 回報(dataGP_unique) }' 這是我所創建的功能。 這是錯誤:* group_by _中的錯誤(.data,.dots = lazyeval :: lazy_dots(...),add = add): object'ProjectID'not found * – Sushant

0

它是一個更復雜的方法,但爲我工作。 我使用聚合函數聚合了有關ProjectID的數量,並將它們存儲在新的Tibble中。 此外,我將這一列作爲新列添加到原始的tibble。 它沒有工作正是我想要的。但是我能夠解決一個新的列Final_Amount保持早期的Amount列不相關。

Duplicate_remove2 <- function(dataGP_cleaned) 
{ 
#aggregating unique amounts 
aggregated_amount <- aggregate(dataGP_cleaned['Amount'], by=dataGP_cleaned['ProjectID'], sum) 
#finding Distinct dataset 
dataGP_unique <- distinct(dataGP_cleaned, ProjectID, .keep_all = TRUE) 
#changing name of the column for easy identification 
aggregated_amount$Final_Amount <- aggregated_amount$Amount 
#appending the list 
aggregate_dataGP <- bind_cols(dataGP_unique, aggregated_amount['Final_Amount']) 
return(aggregate_dataGP) 
} 
相關問題