R + reshape: дисперсия столбцов data.frame - PullRequest
1 голос
/ 28 июля 2010

Я использую Reshape в R для вычисления статистической статистики по столбцам data.frame. Вот мой data.frame:

> df
  a a b b ID
1 1 1 1 1  1
2 2 3 2 3  2
3 3 5 3 5  3

, который представляет собой небольшой тестовый файл data.frame, чтобы попытаться понять пакет изменения формы. Я таю, а затем разыгрываю, чтобы попытаться найти среднее значение a s и b s:

> melt(df, id = "ID") -> df.m
> cast(df.m, ID ~ variable, fun = mean)
  ID a b
1  1 1 1
2  2 2 2
3  3 3 3

Argh! Какие? Надеюсь, что среднее значение c(2,3) будет 2,5 и так далее. В чем дело? Вот вещь:

> df.m
   ID variable value
1   1        a     1
2   2        a     2
3   3        a     3
4   1        a     1
5   2        a     2
6   3        a     3
7   1        b     1
8   2        b     2
9   3        b     3
10  1        b     1
11  2        b     2
12  3        b     3

что происходит? Куда делись мои 1013? У меня есть очень простое недоразумение? Если так: что это?

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Это недопустимый фрейм данных, поскольку столбцы не имеют уникальных имен.

1 голос
/ 29 июля 2010

Я обновил свой ответ здесь, чтобы исправить это: R: совокупные столбцы data.frame

Очевидно, что если у вашего фрейма данных нет уникальных имен столбцов, они выиграли 'тает правильно.

Редактировать: Вместо имен столбцов a a a b b, очевидно, вам нужны уникальные имена столбцов, чтобы melt() работал правильно.Минимально a.1 a.2 a.3 b.1 b.2 или что-то в этом роде.После использования melt() вы можете получить разумные уровни для variable, либо использовать gsub() на уровнях variable для устранения неоднозначных значений, либо использовать colsplit() для создания двух новых столбцов.Для фиктивных имен, которые я только что дал, это выглядело бы так:

levels(df.m$variable) <- gsub("\\..*", "", levels(df.m$variable))
#or
df.m <- cbind(df.m, colsplit(df.m$variable, split = "\\.", names = c("Measure","N")))
...