Как я могу добавить среднее группы в качестве новой группы в аккуратном фрейме данных в R? - PullRequest
0 голосов
/ 24 апреля 2020

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

   frame trial  x     T
 * <int> <chr> <dbl> <dbl>
 1     1     1 0.981 0    
 2     2     1 0.952 0.144
 3     3     1 0.963 0.289
.
.
.
71     1     2 0.988 0
72     2     2 0.997 0.144
73     3     2 0.996 0.289
.
.
.

Я могу сделать это, используя rbind(my.df, subset(my.df, trial == "1"), чтобы создать новое наблюдение, а затем обменять значения на my.df$x = rowSums(trial_matrix)

. Для этого сначала мне нужно поместить значения x моих испытаний в матрица пробного времени. Такое ощущение, что должен быть более эффективный способ сделать это с dplyr, но я нахожу только примеры получения среднего значения в группе, а не для всего вектора по группам, например,

my.df %>%
     group_by(trial) %>%
     dplyr::summarize(Mean = mean(x))

производит

  trial    Mean
  <chr> <dbl>
1     1  1.07
2     2  1.08
3     3  1.19
4     4  1.34

1 Ответ

0 голосов
/ 25 апреля 2020

Вы должны рассчитать его и объединить, например, если ваши данные таковы:

set.seed(111)
my.df = data.frame(
frame = sample(1:3,100,replace=TRUE),
trial = sample(1:3,100,replace=TRUE),
x = runif(100,min=1,max=100)
)

Я полагаю, что кадр - это момент времени, и вам нужно среднее значение для каждого момента времени во всех испытаниях:

library(dplyr)
my.df %>% group_by(frame) %>% summarize(T=mean(x)) %>% right_join(my.df)

Joining, by = "frame"
# A tibble: 100 x 4
   frame     T trial     x
   <int> <dbl> <int> <dbl>
 1     2  51.5     3  2.70
 2     3  57.1     3 32.7 
 3     3  57.1     3 53.4 
 4     3  57.1     2 67.0 
 5     1  45.1     1 39.8 
 6     3  57.1     3 28.0 
 7     1  45.1     1 29.5 
 8     3  57.1     2 75.2 
 9     2  51.5     3 52.3 
10     1  45.1     1 74.0 

Теперь для того же кадра у вас есть похожие значения.

...