Je veux calculer rowMeans d'une plage de colonnes mais je ne peux pas donner la valeur codée en dur pour les colnames (par exemple c (C1, C3)) ou gamme (ex: C1: C3) car les noms et la portée sont variables. Mon df ressemble:Calculer rowMeans sur une plage de colonne (numéro de variable)
> df
chr name age MGW.1 MGW.2 MGW.3 HEL.1 HEL.2 HEL.3
1 123 abc 12 10.00 19 18.00 12 13.00 -14
2 234 bvf 24 -13.29 13 -3.02 12 -0.12 24
3 376 bxc 17 -6.95 10 -18.00 15 4.00 -4
Ceci est juste un échantillon, en réalité, j'ai colonnes allant dans MGW.1 ... MGW.196 et ainsi. Ici Au lieu de donner les colnames exactes ou une plage exacte, je veux passer l'initiale de colnames et vouloir obtenir la moyenne de toutes les colonnes ayant ces initiales. Quelque chose comme: MGW=rowMeans(df[,MGW.*]), HEL=rowMeans(df[,HEL.*])
donc ma sortie finale devrait ressembler à:
> df
chr name age MGW Hel
1 123 abc 12 10.00 19
2 234 bvf 24 13.29 13
3 376 bxc 17 -6.95 10
Je sais que ces valeurs ne sont pas correctes, mais il est juste pour vous donner et idée. Deuxièmement, je veux supprimer toutes les lignes de la trame de données qui contient NA dans la ligne entière à l'exception des 3 premières valeurs.
Voici le dput par exemple exemple:
> dput(df)
structure(list(chr = c(123L, 234L, 376L), name = structure(1:3, .Label = c("abc",
"bvf", "bxc"), class = "factor"), age = c(12L, 24L, 17L), MGW.1 = c(10,
-13.29, -6.95), MGW.2 = c(19L, 13L, 10L), MGW.3 = c(18, -3.02,
-18), HEL.1 = c(12L, 12L, 15L), HEL.2 = c(13, -0.12, 4), HEL.3 = c(-14L,
24L, -4L)), .Names = c("chr", "name", "age", "MGW.1", "MGW.2",
"MGW.3", "HEL.1", "HEL.2", "HEL.3"), class = "data.frame", row.names = c(NA,
-3L))
J'ai posé une question connexe hier et les réponses pourraient vous aider t. Voici le lien http: // stackoverflow.com/questions/38594808/better-way-d'addition-data-frame-columns-by-reference-to-indeces – Warner
@Warner Comme je l'ai mentionné dans ma question, je ne peux pas explicitement mentionner les colnames ou les index, car ils sont variables , parfois il y aura 196 colonnes pour lesquelles je veux un rowMean et parfois il y en aura 198 ou plus. – Newbie
Vous pouvez sous-ensemble 'df' avec un vecteur" logique "de positions où' names (df) ''? StartsWith' '" MGW "' etc. Aussi, voyez '' complete.cases' pour trouver les lignes qui contiennent seulement ' NA' (après avoir déduit toutes les colonnes sauf les trois premières). –