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.
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.
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] ] ))]