2010-01-10 66 views
3

我试图将一些数据导入到R中,并没有太多运气将相关数据的行分组在一起。分组中的行或列数据R

示例: 存在一组问题,如{A,B,C,D}。每个问题都有两个感兴趣的变量:“x”和“y”。 根据一些简单的统计数据分析每个变量:min,max,mean,stddev。

所以,我的输入数据的形式为:

 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 

有什么办法来保护这些数据在R的结构? 一个类似的问题是创建一组列(例如向右翻转90度)。

回答

4

实际上您有很多选项:数据框(关系表)或列表。下面的代码将显示如何创建一个数据框,然后将其分成包含元素{x,y}或{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

谢谢Stephen。这非常有帮助。 – Daniel 2010-01-11 02:24:37