2013-06-04 2 views
1

Я начинаю с кадра данных, который состоит из трех столбцов. В колонке № 1 указаны идентификаторы, указывающие 3 разных периода времени, когда вес (столбец № 3) некоторых лиц (столбец № 2) был измерен в кг.R-формат data.frame в другой 'комбинированный' data.frame на основе общих значений внутри столбца, зависящего от разных столбцов

Все люди были измерены нерегулярно, что означает, что некоторые люди измеряются несколько раз или только один раз в течение периода времени, но не во все периоды времени.

id  person_name person_weight 
    1   Carol   51 
    1   Mike   76 
    1   Mike   81 
    1   Dave   66 
    1   Carol   59 
    2   James   78 
    2   Simone  55 
    2   Simone  49 
    2   David   85 
    3   Mike   93 
    3   Dave   110 
    3   Dave   98 

На самом деле, все дело здесь просто упрощенный пример .. так что не беспокоить, если этот вид сбора данных не имеет смысла.

Теперь я хочу, чтобы вычислить вес в среднем (в среднем) для каждого человека в течение определенного периода времени, а затем конца с комбинированным кадром данных, который выглядит как следующий:

group_id Carol Mike Dave James Simone David 
    1   55  78.5  66  NA  NA  NA 
    2   NA  NA  NA  78  52  85 
    3   NA  93  104  NA  NA  NA 

я попробовал некоторые основные функции R (таблица, применить и т. д.), но не могут иметь дело с зависимостью от столбцов.

Заранее благодарим за любую помощь, которая приближает меня ко второму/«комбинированному» кадру данных.

+1

Некоторые словарь будет полезен здесь, я думаю. Ваш первый набор данных, где каждое * измерение * является отдельной записью, называется данными формата long. Существует два соответствующих 'широких' формата: один со строкой для каждой группы (тот, который вы хотите), и один с строкой для каждого человека. Переключение между длинными и широкими форматами обычно называется 'reshaping'; мы «переплавляем» широкие данные в длинные данные и «отбрасываем» длинные данные в широкие данные. Это мощные концепции, и 'reshape2' - отличная реализация их - делает жизнь намного проще. Хорошо стоит потратить время, чтобы учиться. –

+0

«Ну стоит потратить время, чтобы учиться». Решение Йорана одобрило ваше предложение. –

ответ

5

Кажется простой dcast:

library(reshape2) 
dcast(dat,id ~person_name, 
     fun.aggregate = mean, 
     value.var = "person_weight",fill = NA_real_) 
    id Carol Dave David James Mike Simone 
1 1 55 66 NA NA 78.5  NA 
2 2 NA NA 85 78 NA  52 
3 3 NA 104 NA NA 93.0  NA 
+0

Спасибо. Ты сделал это! –

Смежные вопросы