web-dev-qa-db-ja.com

Rのデータフレームに列を追加する

次のデータフレームがあります(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で遊んでみましたが、この簡単なタスクを達成できませんでした。

54
David B

これは、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の関数を超える必要はありません。

71

それが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] ] ))]
1
statquant