2012-04-17 81 views
1

如何獲取列中相應條目中具有相同條目的列中幾個條目的平均值?R表格修改

例如我有一個大的表,有3列,時間和價格是2,並讓我們說在時間欄下的值重複。如10:30出現4次,那麼我需要取對應價格列條目的平均值,並將其單獨彙總到10:30的單行中,並以單一價格進行彙總。有人能提供一些見解嗎?

的樣本數據:

time  prices  size 
10:00  23  1 
10:15  12  3 
10:30  12  1 
10:30  19  4 
10:45  12  1 

我想修改的行3和4合併成單行,平均價格。

回答

3

如何像

tapply(prices, time, mean) 

更完整的畫面,看到?tapply

但你想與列size做什麼?

編輯:

要利用價格的均值和大小的最後一個值,這裏有一個建議:

myDF<-data.frame(time=c("10:00","10:15","10:30","10:30","10:45"), 
    prices=c(23,12,12,19,12),size=c(1,3,1,4,1)) 

theRows <- tapply(seq_len(nrow(myDF)), myDF$time, function(x) { 
    return(data.frame(time = head(myDF[x, "time"],1), prices = mean(myDF[x, "prices"]), 
    size = tail(myDF[x, "size"], 1))) 
    } 
) 

Reduce(function(...) rbind(..., deparse.level = FALSE), theRows) 

附:這可以很好地使用ddply - 也見保羅的答案!

+0

非常感謝您對尺寸列的幫助,我希望它考慮最後一個條目..我希望它在這種情況下保留4。這就是它必須如何爲所有人工作。 – Probabilityman 2012-04-17 14:15:46

3

你也可以看看plyr包。我會用ddply此:

ddply(df, .(time), summarise, 
    mean_price = mean(prices), 
    sum_size = sum(size)) 

這是假定你的數據是在df。有關plyr的更詳細說明,請參閱統計軟件期刊中的this paper

其他替代方案包括使用data.tableave

+0

謝謝你。我不太關注ddply的功能。如果我想合計大小列的內容,那麼平均列出在各行中具有相同時間的條目的價格列。 – Probabilityman 2012-04-17 22:50:44

+0

我將我的代碼擴展到包括大小列的總和,另外我添加了一個參考文獻,很好地描述了plyr。 – 2012-04-18 07:24:54

+0

非常感謝@Paul Hiemstra – Probabilityman 2012-04-22 23:41:14