Disons que je fais un téléchargement factice avec 6 colonnes avec 10 observations: 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: p> 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 à: p> J'imagine que je dois utiliser la fonction suivante em> à itérer dans la boucle, Mais je suis assez perdu! Merci pour toute aide. P> P>
3 Réponses :
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
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
Voici une option avec Tidyverse code>
Répétez-vous les valeurs? par exemple
somme (b) + somme (c)) / somme (a) code> alorssomme (d) + somme (c)) / somme (a) code> ou doit-il êtresomme (d) + somme (c)) / somme (b) code>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.