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