2012-03-06 27 views
0

應用函數以柱,用值I具有R中的下列問題:從其它行

讓我們假設下列數據幀:

a b c d e 
1 1 1 1 1 15.5 
2 1 1 1 2 8.3 
3 1 1 2 1 12.4 
4 1 1 2 2 3.2 
... 

欲函數f(x,y)適用於從列中的數字e,其中x和y從除d(當然還有e)以外的所有列中具有相同值的兩行繪製。

輸出應該是一個新的數據框,其中列d被刪除(因爲「合併」使該列無關),列e是應用函數的結果。

所以在上面的例子中,假設f(x,y)是此外,新的數據幀應該是這樣的:

a b c  e 
1 1 1 1  23.8 
3 1 1 2  15.6 
... 

我曾嘗試到目前爲止看起來像下面的,感覺很不雅觀:

data.d1 <- subset(data, d==1) 
for (index in 1:nrow(data.d1)) 
    row1 <- data.d1[index,] 
    row2 <- data[data$a==row1$a & data$b==row1$b & data$c==row1$c & data$d==2,] 
    data[index,"e"] <- f(row1$e, row2$e) 
} 
data <- data[-match(c("d"), names(data))] 

有人有一個更乾淨的解決方案,使用apply()之類的? 在此先感謝!

回答

4

這裏是例子:

d> ddply(x, .(a, b, c), summarize, e = sum(e)) 
    a b c e 
1 1 1 1 23.8 
2 1 1 2 15.6 
d> aggregate(e~a+b+c, sum, data = x) 
    a b c e 
1 1 1 1 23.8 
2 1 1 2 15.6 

ddplyplyr包的功能。