Добавление столбца в фрейм данных в R - PullRequest
54 голосов
/ 06 сентября 2010

У меня есть следующий фрейм данных (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 ]

71 голосов
/ 06 сентября 2010

Это довольно стандартный вариант использования для 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 голос
/ 12 августа 2017

Даже если это вопрос 7 лет, новичкам в R следует рассмотреть возможность использования пакета data.table .

data.table - это data.frame, поэтому все, что вы можете сделать для / для data.frame, вы также можете сделать. Но многие думают, что НАПРАВЛЕНИЯ величины быстрее с 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] ] ))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...