2014-03-25 41 views
0

我想引用數據幀列中的值,其中行索引取決於另一列的值。數據幀中的R間接引用

實施例:

value lag laggedValue 
1  1  2 
2  2  4 
3  3  6 
4  2  6 
5  1  6 
6  3  9 
7  3  10 
8  1  9 
9  1  10 
10  2 

在Excel我用這個公式在列 「laggedValue」:

=INDIRECT("B"&(ROW(B2)+C2)) 

我怎樣才能做到這一點在R數據幀?

謝謝!

+0

你能明確指定什麼是列「B」和列「C」? – Chris

+1

好像你只是加了'value'和'lag' – rawr

+0

好吧,對不起,發佈這個問題時我很着急。 B欄是「價值」C是「滯後」。 laggedValue不僅是價值和滯後的總和,而且是「價值」列的輸入,滯後於「滯後」中指示的行數。愚蠢的例子,我同意。應該更具體。無論如何,josilber都沒錯。謝謝! – user3460194

回答

0

對於相關的滯後值lag[r]它看起來像你想創建一個新的列是value(r+lag[r])個元素行r(或缺少值,如果這是超出界限)。你可以這樣做:

dat$laggedValue <- dat$value[seq(nrow(dat)) + dat$lag] 
dat 
    value lag laggedValue 
1  1 1   2 
2  2 2   4 
3  3 3   6 
4  4 2   6 
5  5 1   6 
6  6 3   9 
7  7 3   10 
8  8 1   9 
9  9 1   10 
10 10 2   NA 

其他評論者提的是,它看起來像你剛剛加入valuelag列,因爲你的value列都有1到10的元素,但這種解決方案,即使你的工作value列中有其他數據存儲在其中。

+0

我覺得這正是我今天所尋找的一段時間。明天我會用我的真實數據進行嘗試。非常感謝! – user3460194

0

假設同樣的事情@rawr這裏:

dat <- data.frame(value=c(1:10), 
        lag=c(1,2,3,2,1,3,3,1,1,2)) 

dat$laggedValue <- dat$value + dat$lag 
dat 
    value lag laggedValue 
1  1 1   2 
2  2 2   4 
3  3 3   6 
4  4 2   6 
5  5 1   6 
6  6 3   9 
7  7 3   10 
8  8 1   9 
9  9 1   10 
10 10 2   12