2010-07-28 15 views
1

J'utilise reshape dans R pour calculer des statistiques agrégées sur les colonnes d'un data.frame. Voici mon data.frame:R + reshape: variance des colonnes d'un data.frame

> df 
    a a b b ID 
1 1 1 1 1 1 
2 2 3 2 3 2 
3 3 5 3 5 3 

qui est juste un peu data.frame de test pour essayer de comprendre le paquet Reshape. Je fondre, puis jeté, pour essayer de trouver la moyenne des a s et les b s:

> melt(df, id = "ID") -> df.m 
> cast(df.m, ID ~ variable, fun = mean) 
    ID a b 
1 1 1 1 
2 2 2 2 
3 3 3 3 

Argh! Quelle? Espérait la moyenne de c(2,3) était de 2,5 et ainsi de suite. Que se passe-t-il? Voici une chose:

> df.m 
    ID variable value 
1 1  a  1 
2 2  a  2 
3 3  a  3 
4 1  a  1 
5 2  a  2 
6 3  a  3 
7 1  b  1 
8 2  b  2 
9 3  b  3 
10 1  b  1 
11 2  b  2 
12 3  b  3 

Que se passe-t-il? Où sont passés mes deux 5? Ai-je un malentendu très basique ici? Si oui: qu'est-ce que c'est?

Répondre

1

Je mis à jour ma réponse ici pour résoudre ce problème: R: aggregate columns of a data.frame

Apparemment, si votre bloc de données n'a pas les noms de colonnes uniques, ils ne fondent pas correctement. Au lieu d'avoir des noms de colonne de a a a b b, vous devez apparemment avoir des noms de colonne uniques pour melt() pour fonctionner correctement. Au minimum a.1 a.2 a.3 b.1 b.2, ou quelque chose. Après avoir utilisé melt(), vos options pour obtenir des niveaux raisonnables pour variable est soit d'utiliser gsub() sur les niveaux de variable pour éliminer les valeurs de désambiguïsation, soit d'utiliser colsplit() pour créer deux nouvelles colonnes. Pour les noms fictifs que je viens de donner, cela ressemblerait à ceci:

+0

quelle douleur! Merci pour la réponse ... –

2

Cette zone de données n'est pas valide car les colonnes n'ont pas de noms uniques.

+0

ne savait pas que je pourrais créer des noms de données invalides. –

+1

vous pouvez faire n'importe quoi dans R;) – hadley