2010-01-10 8 views
3

J'essaie d'importer des données dans R et de ne pas avoir beaucoup de chance à regrouper des lignes de données connexes. Exemple: Il existe un ensemble de problèmes tels que {A, B, C, D}. Chaque problème a deux variables d'intérêt qui sont mesurées: "x" et "y". Chaque variable est analysée en termes de statistiques simples: min, max, mean, stddev.Regroupement de lignes ou de colonnes de données dans R

Donc, mes données d'entrée a la forme:

 Min Max Mean StdDev 
A 
    x 3 10 6.6 2.1 
    y 2 5 3.2 1.7 
B 
    x 3 10 6.6 2.1 
    y 2 5 3.2 1.7 
C 
    x 3 10 6.6 2.1 
    y 2 5 3.2 1.7 
D 
    x 3 10 6.6 2.1 
    y 2 5 3.2 1.7 

Est-il possible de préserver la structure de ces données en R? Un problème similaire est la création de groupes de colonnes (inverser la table de 90 degrés vers la droite par exemple).

Répondre

4

Vous disposez en réalité de nombreuses options: une trame de données (table relationnelle) ou une liste. Le code suivant montre comment créer une trame de données, puis la diviser en une liste contenant les éléments {x, y} ou {A, B, C, D}:

> txt <- "  Min Max Mean StdDev 
+ A 
+ x 3 10 6.6 2.1 
+ y 2 5 3.2 1.7 
+ B 
+ x 3 10 6.6 2.1 
+ y 2 5 3.2 1.7 
+ C 
+ x 3 10 6.6 2.1 
+ y 2 5 3.2 1.7 
+ D 
+ x 3 10 6.6 2.1 
+ y 2 5 3.2 1.7 
+ " 
> 
> data <- head(readLines(textConnection(txt)),-1) 
> fields <- strsplit(sub("^[ ]+","",data[!nchar(data)==1]),"[ ]+") 
> DF <- `names<-`(data.frame(rep(data[nchar(data)==1],each=2), ## letters 
+       do.call(rbind,fields[-1])),  ## data 
+     c("Letter","xy",fields[[1]]))    ## colnames 
> split(DF,DF$xy) 
$x 
    Letter xy Min Max Mean StdDev 
1  A x 3 10 6.6 2.1 
3  B x 3 10 6.6 2.1 
5  C x 3 10 6.6 2.1 
7  D x 3 10 6.6 2.1 

$y 
    Letter xy Min Max Mean StdDev 
2  A y 2 5 3.2 1.7 
4  B y 2 5 3.2 1.7 
6  C y 2 5 3.2 1.7 
8  D y 2 5 3.2 1.7 

> split(DF,DF$Letter) 
$A 
    Letter xy Min Max Mean StdDev 
1  A x 3 10 6.6 2.1 
2  A y 2 5 3.2 1.7 

$B 
    Letter xy Min Max Mean StdDev 
3  B x 3 10 6.6 2.1 
4  B y 2 5 3.2 1.7 

$C 
    Letter xy Min Max Mean StdDev 
5  C x 3 10 6.6 2.1 
6  C y 2 5 3.2 1.7 

$D 
    Letter xy Min Max Mean StdDev 
7  D x 3 10 6.6 2.1 
8  D y 2 5 3.2 1.7 
+0

Merci Stephen. C'était très utile. – Daniel

Questions connexes