[英]Grouping rows or columns of data in 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度)。
您實際上有很多選項:數據框(關系表)或列表。 以下代碼將說明如何創建數據框,然后將其拆分為包含元素{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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.