Повторно скопируйте фрейм данных в R - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть фрейм данных, который содержит данные о деятельности (A) за время (T) для ряда субъектов (S) в разных группах (G).Данные активности отбирались каждые 10 минут.То, что я хотел бы сделать, это повторно объединить данные, скажем, в 30-минутные ячейки (либо добавляя, либо усредняя значения), сохраняя идентификатор субъекта и информацию о группе.

Пример.У меня есть что-то вроде этого:

S   G   T   A
1   A   30  25
1   A   40  20
1   A   50  15
1   A   60  20
1   A   70  5
1   A   80  20
2   B   30  10
2   B   40  10
2   B   50  10
2   B   60  20
2   B   70  20
2   B   80  20

И я хотел бы что-то вроде этого:

S   G   T   A
1   A   40  20
1   A   70  15
2   B   40  10
2   B   70  20

Является ли время среднее время (как в примере) или первый / последниймомент времени и то, является ли действие усредненным (опять же, как в примере) или суммированным, сейчас не важно.

Буду признателен за любую помощь, которую вы можете оказать в этом.Я думал о создании скрипта в Python для повторного связывания этого конкретного кадра данных, но я подумал, что может быть способ сделать это в R таким образом, чтобы его можно было применить к любому кадру данных с различным количеством столбцов и т. Д.

1 Ответ

0 голосов
/ 11 апреля 2019

Есть несколько способов прийти к желаемому фрейму данных.Я воспроизвел ваш фрейм данных:

df <- data.frame(S = c(rep(1,6),rep(2,6)),
                 G = c(rep("A",6),rep("B",6)),
                 T = rep(seq(30,80,10),2),
                 A = c(25, 20, 15, 20, 5, 20, 10, 10, 10, 20, 20, 20))

Классический способ может быть:

df[df$T == 40 | df$T == 70,]

Более современный tidyverse путь -

library(tidyverse)
df %>% filter(T == 40 | T ==70)

Если вы хотите получить среднее значение каждой группы G, отфильтрованное для T == 40 и 70:

df %>% filter(T == 40 | T == 70) %>% 
       group_by(G) %>% 
       mutate(A = mean(A))
...