2016-11-10 58 views
0

我在R. data兩個數據幀,每個部門每月銷售在商店的框架,看起來是這樣的:將數據寫入到另一個R中的新列

dataframe named data

雖然averages,有超過每個部門的所有月份的平均銷售額的框架,看起來是這樣的:

dataframe named averages

我想什麼做的就是添加一列data包含每個部門的平均銷售額(第3列averages)。所以現在我有一個全零的avg列,我希望它包含該行中列出的任何部門的整體平均銷售額。這是代碼我現在有:

for(j in 1:nrow(avgs)){ 
    for(i in 1:nrow(data)){ 
    if(identical(data[i,4], averages[j,1])){ 
     gd[i,10] <- avgs[j,3] } } } 

運行循環後,在dataavg列仍然是全零,這讓我覺得if(identical(data[i,4], averages[j,1]))一直在評估對FALSE ......但是,爲什麼會變成這樣?我如何解決這個問題/是否有更好的方法來做到這一點?

+0

不要將您的數據作爲圖像發佈,請學習如何給出[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap

+0

@ProcrastinatusMaximus現在我有了答案,我看到它與其他問題是如何相關的。因爲我不知道函數的名稱是合併的,所以其他線程並沒有出現在我的搜索中,並且在我想要完成的事情時我沒有足夠的數學理解來思考它在加入方面。 ^。^ – boop

回答

0

您是否在尋找merge的功能?

merge(x = data, y = avgs, by = "departmentName", all.x=TRUE) 
+0

由於某種原因,當我嘗試這種方法時出現堆棧錯誤:'錯誤:C堆棧使用19925264太接近極限了。數據框不是很大,所以我不知道爲什麼會這樣。對不起,我的胖手指輸入太快 – boop

+0

我相信這個錯誤是因爲前面的代碼的深度遞歸,如果你嘗試任何其他的可能,你會看到完全相同的錯誤。這不正確嗎?如果你,也許你想重新啓動r。並請張貼數據而不是圖片,以便人們重現您的示例 – MFR

+1

右側重新開始。那之後就完美了。謝謝! – boop

-2

我會用dplyr做:

dplyr::full_join(data, averages, by = "departmentName") 

約dplyr偉大的事情(除了速度快),是它有一個非常簡單的語法。而且,如果你的兩個表有不同名稱的變量,那麼也可以指定。想象一下,你在表平均值表數據和avgs_departmentName有data_departmentName:

dplyr::full_join(data, averages, by = c("data_departmentName" = "averages_departmentName")) 

然後,我會篩選數據集,如果你只是想從第二個數據集的特定列。如果你知道你的數據是有序的,並具有相同的長度,那麼你可以像添加它:

data$avgs <- averages$avgs 

但我寧願先加入,然後過濾。

相關問題