0
votes

Créez une boucle pour calculer des valeurs à partir d'un Dataframe dans R?

Disons que je fais un téléchargement factice avec 6 colonnes avec 10 observations: xxx

Je dois créer une boucle qui évalue 3 colonnes à la fois, ajoutant les deuxième et troisième colonnes et Division de ceci par la somme de la première colonne: xxx

J'ai alors besoin de construire un fichier de données final à partir de ces valeurs. Par exemple, en utilisant le fichier de données factice ci-dessus, il ressemblerait à: xxx

J'imagine que je dois utiliser la fonction suivante à itérer dans la boucle, Mais je suis assez perdu! Merci pour toute aide.


2 commentaires

Répétez-vous les valeurs? par exemple somme (b) + somme (c)) / somme (a) alors somme (d) + somme (c)) / somme (a) ou doit-il être somme (d) + somme (c)) / somme (b)


Salut Onyambu, aucune valeur ne se répète pas - ce sont toutes les 3 colonnes discrètes. Donc, C + B / A, puis E + F / D, et ainsi de suite.


3 Réponses :


1
votes

Vous pouvez Split code> votre cadre de données en groupes de 3 en créant un vecteur avec rep code> où chaque élément se répète 3 fois. Ensuite, avec cette liste de cadres sous-données, (s) appliquer la fonction de résumer les deuxième et troisième colonnes, en les ajoutant et en divisant par la somme de la première colonne.

out_vec <- 
  sapply(
    split(colSums(X), rep(1:ncol(X), each = 3, length.out = ncol(X)))
    , function(x) (x[2] + x[3])/x[1])

data.frame(value = out_vec, row.names = NULL)
#      value
# 1 7.454545
# 2 2.845070


0 commentaires

1
votes

Vous pouvez utiliser TAPPLY CODE>:

tapply(colSums(X), gl(ncol(X)/3, 3), function(x)sum(x[-1])/x[1])
       1        2 
7.454545 2.845070 


0 commentaires

0
votes

Voici une option avec Tidyverse xxx


0 commentaires