Добавление столбца в кадр данных в 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
, но не смог выполнить эту простую задачу.
Ответы
Ответ 1
Это довольно стандартный вариант использования для 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.
Ответ 2
Даже если это 7-летний вопрос, люди, новые для R, должны рассмотреть возможность использования data.table, package.
Data.table - это data.frame, поэтому все, что вы можете сделать для/для data.frame, также можете сделать. Но многие думают, что ORDERS на порядок быстрее с data.table.
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] ] ))]