преобразовать матрицу так, чтобы фактор стал именем строки - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть следующие данные - это дамп из нормализованной базы данных, но я не могу получить доступ к базе данных, и сопровождающий базы данных настаивает, что в этом нет необходимости.

Переменная obs - это уникальный идентификатор наблюдения, a.k.a., который нужно «развернуть» вокруг

В частности, я хочу перейти от этого olddata к newdata фрейму данных ниже:

> olddata
    species obs variable value
3      ADFA   1     mean     4
4      ADFA   1      lat   118
5      ADFA   1      lon    49
6      ADFA   1     masl    74
96     HODO   8     mean    18
97     HODO   8      lat   120
98     HODO   8      lon    45
99     HODO   8     masl    36
189    HODO   9     mean    34
190    HODO   9      lat   126
191    HODO   9      lon    12
192    HODO   9     masl    35

Я хотел бы изменить этот фрейм данных так:

> newdata
  species obs mean lat lon masl
1    ADFA   1    4 118  49   74
2    HODO   8   18 120  45   36
3    HODO   9   34 126  12   35

Отказ от ответственности: это, вероятно, задавалось ранее, но я не могу найти вопрос среди многих вопросов, связанных с преобразованием фреймов / матриц данных


Вот кадры данных для использования при воспроизведении этой проблемы:

olddata <- structure(list(species = c("ADFA", "ADFA", "ADFA", "ADFA", "HODO", 
             "HODO", "HODO", "HODO", "HODO", "HODO", "HODO", "HODO"), obs = c(1, 
             1, 1, 1, 8, 8, 8, 8, 9, 9, 9, 9), variable = c("mean", "lat", 
             "lon", "masl", "mean", "lat", "lon", "masl", "mean", "lat", "lon", 
             "masl"), value = c(4, 118, 49, 74, 18, 120, 45, 36, 34, 126, 
             12, 35)), .Names = c("species", "obs", "variable", "value"), 
             row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
              "11", "12"), class = "data.frame")

newdata <- structure(list(species = c("ADFA", "HODO", "HODO"), obs = c(1, 
             8, 9), mean = c(4, 18, 34), lat = c(118, 120, 126), lon = c(49, 
             45, 12), masl = c(74, 36, 35)), .Names = c("species", "obs", 
             "mean", "lat", "lon", "masl"), row.names = c(NA, -3L), 
             class = "data.frame")

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Вот пример:

> library(reshape2)
> dcast(olddata, species+obs~variable)
  species obs lat lon masl mean
1    ADFA   1 118  49   74    4
2    HODO   8 120  45   36   18
3    HODO   9 126  12   35   34
1 голос
/ 02 февраля 2012
library(reshape2)    
dcast(olddata,species+obs~variable)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...