在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
)的长vector。
我想添加到每一行的另一列,在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
,但是这里并不需要超越base R的函数。
即使这是一个7年的问题,新来R的人应该考虑使用data.table ,package。
一个data.table是一个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] ] ))]