Группировка строк или столбцов данных в R - PullRequest
3 голосов
/ 10 января 2010

Я пытаюсь импортировать некоторые данные в 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 градусов вправо).

1 Ответ

4 голосов
/ 10 января 2010

На самом деле у вас есть много вариантов: фрейм данных (реляционная таблица) или список. Следующий код покажет, как создать фрейм данных, а затем разбить его на список, содержащий элементы {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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...