次のデータフレームがあります(df
)
_ start end
1 14379 32094
2 151884 174367
3 438422 449382
4 618123 621256
5 698271 714321
6 973394 975857
7 980508 982372
8 994539 994661
9 1055151 1058824
. . .
. . .
. . .
_
そして、数値(vec
)を持つ長いベクトル。
各行に別の列を追加し、vec
の対応する場所の値の平均を追加します。たとえば、最初の行にはmean(vec[14379:32094])
が含まれます。 transform
で遊んでみましたが、この簡単なタスクを達成できませんでした。
これは、apply()
の非常に標準的な使用例です。
R> vec <- 1:10
R> DF <- data.frame(start=c(1,3,5,7), end=c(2,6,7,9))
R> DF$newcol <- apply(DF,1,function(row) mean(vec[ row[1] : row[2] ] ))
R> DF
start end newcol
1 1 2 1.5
2 3 6 4.5
3 5 7 6.0
4 7 9 8.0
R>
必要に応じてplyr
を使用することもできますが、基本Rの関数を超える必要はありません。
それが7年前の質問であっても、Rを初めて使う人は data.table 、パッケージの使用を検討すべきです。
Data.tableはdata.frameであるため、data.frameに対してできること、またはdata.frameに対してできることはすべて可能です。しかし、多くの人はdata.tableを使用することでORDERSが大幅に速くなると考えています。
vec <- 1:10
library(data.table)
DT <- data.table(start=c(1,3,5,7), end=c(2,6,7,9))
DT[,new:=apply(DT,1,function(row) mean(vec[ row[1] : row[2] ] ))]