将列添加到R中的数据框

时间:2010-09-06 13:02:31

标签: r dataframe

我有以下数据框(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,但无法完成这个简单的任务。

2 个答案:

答案 0 :(得分:71)

这是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的功能。

答案 1 :(得分:0)

即使这是一个7岁的问题,R新手应该考虑使用data.table套餐。

data.table是一个data.frame,所以你可以为数据框执行所有操作。但是很多人认为数据的速度更快。或者

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] ] ))]