我正在尝试将一些数据导入到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度)。
答案 0 :(得分: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