2010-06-28 52 views
1

我知道這個答案必須在那裏,但我無法弄清楚如何說出問題。請參閱R中的相關行

我想計算我的data.frame中的值之間的差異。

f <- data.frame(year=c(2004, 2005, 2006, 2007), value=c(8565, 8745, 8985, 8412)) 

    year value 
1 2004 8565 
2 2005 8745 
3 2006 8985 
4 2007 8412 

這樣::

從這個

year value diff 
1 2004 8565 NA 
2 2005 8745 180 
3 2006 8985 240 
4 2007 8412 -573 

但我不知道如何有一個(即上一年的本年度負值的值)導致從另一行創建的一行。任何幫助?

感謝, 湯姆

回答

10

有許多不同的方法可以做到這一點,但這裏有一個:

f[, "diff"] <- c(NA, diff(f$value)) 

更一般地,如果你想指的是相行,你可以使用lag()或做它直接與指標:

f[-1,"diff"] <- f[-1, "value"] - f[-nrow(f), "value"] 
+0

完美!謝謝。 – Tom 2010-06-28 14:06:27

+0

@Tom:太好了!請在您獲得機會時將其標記爲已接受,以便人們知道這是回答您的問題。 – Shane 2010-07-06 23:52:03

1

使用diff功能

f <- cbind(f, c(NA, diff(f[,2]))) 
1

如果year列沒有排序,那麼你可以使用match

f$diff <- f$value - f$value[match(f$year-1, f$year)] 
+0

@mbq你能更具體嗎?對於1,000,000行時間是相似的(我的0.8秒,Shane的0.3)。而當你添加排序然後更慢(排序1.5秒)。 – Marek 2010-06-29 22:14:47

+0

你說得對,對不起;這是一個不錯的解決方案。我讀得太快了,誤解了你的代碼。我會盡力將其刪除,以免混淆人。 – mbq 2010-06-29 23:34:56