Подтвердить что ты не робот

Добавление столбца средств по группам к исходным данным

Я хочу добавить столбец средств на основе столбца факторов в R data.frame. Вот так:

df1 <- data.frame(X = rep(x = LETTERS[1:2], each = 3), Y = 1:6)
df2 <- aggregate(data = df1, Y ~ X, FUN = mean)
df3 <- merge(x = df1, y = df2, by = "X", suffixes = c(".Old",".New"))
df3
#   X Y.Old Y.New
# 1 A     1     2
# 2 A     2     2
# 3 A     3     2
# 4 B     4     5
# 5 B     5     5
# 6 B     6     5

Чтобы решить эту проблему, я должен создать два ненужных data.frames. Я хотел бы знать способ добавить столбец значений по столбцу факторов в мой оригинальный data.frame, не создавая лишних data.frames. Спасибо за ваше время и помощь.

4b9b3361

Ответ 1

Это функция ave для.

df1$Y.New <- ave(df1$Y, df1$X)

Ответ 2

Два альтернативных способа сделать это:

1. с пакетом dplyr:

library(dplyr)
df1 <- df1 %>% 
  group_by(X) %>% 
  mutate(Y.new = mean(Y))

2. с пакетом data.table:

library(data.table)
setDT(df1)[, Y.new := mean(Y), by = X]

оба дают следующий результат:

> df1
   X Y Y.new
1: A 1     2
2: A 2     2
3: A 3     2
4: B 4     5
5: B 5     5
6: B 6     5

Ответ 3

ddply и transform для спасения (хотя я уверен, что вы получите как минимум 4 разных способа сделать это):

library(plyr)
ddply(df1,.(X),transform,Y.New = mean(Y))
  X Y Y.New
1 A 1     2
2 A 2     2
3 A 3     2
4 B 4     5
5 B 5     5
6 B 6     5

Ответ 4

Йоран прекрасно ответил: "Это не ответ на ваш вопрос, а продолжение разговора. Если вы ищете таблицу значений для двух отношений категориальной переменной с зависимой здесь функцией Хэдли:

cast(CO2, Type ~ Treatment, value="uptake", fun.aggregate=mean, margins=TRUE)

Здесь вид головы данных СО2 и посмотрите таблицу средств:

> head(CO2)
  Plant   Type  Treatment conc uptake
1   Qn1 Quebec nonchilled   95   16.0
2   Qn1 Quebec nonchilled  175   30.4
3   Qn1 Quebec nonchilled  250   34.8
4   Qn1 Quebec nonchilled  350   37.2
5   Qn1 Quebec nonchilled  500   35.3
6   Qn1 Quebec nonchilled  675   39.2

> library(reshape)

> cast(CO2, Type ~ Treatment, mean, margins=TRUE)  
         Type nonchilled  chilled    (all)
1      Quebec   35.33333 31.75238 33.54286
2 Mississippi   25.95238 15.81429 20.88333
3       (all)   30.64286 23.78333 27.21310