Ajout d'une colonne à un dataframe dans R

J'ai le dataframe suivant(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
.   .       .
.   .       .
.   .       .

Et un vecteur long avec des valeurs numériques (vec).

Je voudrais ajouter à chaque ligne d'une autre colonne, avec la moyenne des valeurs dans les endroits correspondant à vec. par exemple, la première ligne aura mean(vec[14379:32094]). J'ai essayé de jouer avec transform mais je n'ai pas pu accomplir cette tâche simple.

54
demandé sur Joshua Ulrich 2010-09-06 17:02:30

2 réponses

C'est un cas d'utilisation assez standard pour 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> 

Vous pouvez également utiliser plyr Si vous préférez, mais ici, il n'y a pas vraiment besoin d'aller au-delà des fonctions de la base R.

71
répondu Dirk Eddelbuettel 2010-09-06 13:20:37

Même si c'est une question de 7 ans, les nouveaux utilisateurs de R devraient envisager d'utiliser les données .tableau , paquet.

Une donnée.le tableau est un ensemble de données.cadre de sorte que tout ce que vous pouvez faire pour/à une donnée.cadre vous pouvez aussi le faire. Mais beaucoup pensent sont des ordres de grandeur plus rapide avec des données.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] ] ))]
0
répondu statquant 2017-08-12 19:50:57