Перекрестные таблицы / таблицы частот с длинными продольными данными в R - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть продольный набор данных с данными в длинном формате (одна строка для каждой временной точки для каждого участника), и я хотел бы получить кросс-таблицы для демографических переменных c в каждой временной точке. Упрощенно, скажем, я хотел таблицу с количеством участников определенного пола (строки) и расы (столбец) для каждого из 3 временных точек (переменная «Время»).

Примерно так:

Time = 1

        White    Black  Total
Male    10       11
Female  9        12
total   19       23     42

И пример набора данных:

Participant Time Race Sex
1           1    White Male 
1           2    NA    NA 
1           3    White Male 
2           2    Black Male
2           3    Black Male
2           NA   NA    NA
3           1    Black Female    
3           NA   NA    NA
3           NA   NA    NA

Я могу сделать это индивидуально, поднабор набора данных для каждой волны, но я был не в состоянии понять, как сделать все это вместе / сразу, если это возможно, без необходимости разбивать данные на новые наборы данных. В идеале он также должен включать% в каждой ячейке и общий размер выборки.

Спасибо!

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете использовать tidyverse:

df <- tribble(~Participant, ~Time, ~Race, ~Sex,
              1,           1,    "White", "Male", 
              1,           2,    NA,      NA, 
              1,           3,    "White", "Male", 
              2,           2,    "Black", "Male",
              2,           3,    "Black", "Male",
              2,           NA,   NA,      NA,
              3,           1,    "Black", "Female",    
              3,           NA,   NA,      NA,
              3,           NA,   NA,      NA)

df %>% 
  group_by(Time, Race, Sex) %>% 
  summarise(count = n()) %>% 
  ungroup() %>% 
  spread(Race, count)

# # A tibble: 6 x 5
#    Time Sex    Black White `<NA>`
#   <dbl> <chr>  <int> <int>  <int>
# 1     1 Female     1    NA     NA
# 2     1 Male      NA     1     NA
# 3     2 Male       1    NA     NA
# 4     2 NA        NA    NA      1
# 5     3 Male       1     1     NA
# 6    NA NA        NA    NA      3

Если вы хотите использовать базу R:

df_list <- split(df, df$time)
lapply(df_list, function(x) table(x$race, x$sex))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...