Сравните социально-демографические характеристики в нескольких точках сбора данных в R

#r

Вопрос:

У меня есть набор данных, в котором данные для каждого идентификатора собираются несколько раз (максимум 4 раза). Это выглядит примерно так, но я работаю с более чем 200 переменными:

 id<-c(1,1,1,1,2,2,2,3,3,3,4,4,4,4)
age_group<-c(17-24 years,NA,NA,NA,25-55,NA,NA,17-24 years,NA,NA,17-24 years,NA,NA,NA)
gender<-c(male,NA,NA,NA,male,NA,NA,female,NA,NA,female,NA,NA,NA)
marital_status<-c(partnered,NA,NA,NA,single,NA,NA,single,NA,NA,partnered,NA,NA,NA)
education<-c(high school,NA,NA,NA,university,NA,NA,university,NA,NA,university,NA,NA,NA)
collection_point<-c(0,1,2,3,0,1,3,0,1,2,0,1,2,3)
df<-data.frame(id,age_group,gender,marital_status,education,collection_point)
 

collection_point Переменная представляет, когда были собраны данные, поэтому 0 является базовым, 1-немедленным, 2-3-месячным наблюдением, а 3-6-месячным наблюдением. Я использовал subset() функцию для удаления исходных данных для создания таблицы социодемографии, используя CreateTableOne() функцию из пакета tableone. Таблица выглядит примерно так:

                                          Overall     
      n                                           400         
      age_group (%)                                           
       17-24 years                              300 ( 75.0) 
       25-55 years                              100 ( 25.9) 
      gender (%)                                     
       Male                                     200 ( 50.0) 
       Female                                   200 ( 50.0) 
      marital_status (%)                    
       Partnered                                200 ( 50.0) 
       Single                                   200 ( 50.0) 
      education (%)                                  
       high school                              100 ( 25.0) 
       University                               300 ( 75.0) 
 

Но я хотел бы сравнить эти характеристики в соответствии с collection_point переменной, чтобы мой желаемый результат выглядел примерно так:

       collection_point                             0                 1                 2                 3   
      n                                           400               300               200               200
      age_group (%)                                           
       17-24 years                              300 ( 75.0)        200 ( 66.7)        100 ( 50.0)        100 ( 50.0)
       25-55 years                              100 ( 25.9)        100 ( 33.3)        100 ( 50.0)        100 ( 50.0)
      gender (%)                                     
       Male                                     200 ( 50.0)        150 ( 50.0)        100 ( 50.0)        100 ( 50.0) 
       Female                                   200 ( 50.0)        150 ( 50.0)        100 ( 50.0)        100 ( 50.0)
      marital_status (%)                    
       Partnered                                200 ( 50.0)        150 ( 50.0)        100 ( 50.0)        100 ( 50.0) 
       Single                                   200 ( 50.0)        150 ( 50.0)        100 ( 50.0)        100 ( 50.0) 
      education (%)                                  
       high school                              100 ( 25.0)        100 ( 33.3)        100 ( 50.0)        100 ( 50.0) 
       University                               300 ( 75.0)        200 ( 66.7)        100 ( 50.0)        100 ( 50.0) 
 

Любая помощь будет очень признательна! Я все еще новичок в R и этой платформе и пытаюсь привыкнуть к ней. Заранее приношу извинения, потому что я знаю, как это сложно выглядит 🙁

РЕДАКТИРОВАТЬ: Это сработало, спасибо! Просто нужно было добавить strata() функцию, а затем использовать CreateTableOne() ее снова. Я создал переменные listVar1 и catVar2.

 listVar1<-c("age_group", "gender", "marital_status", "education") 
catVar2<-c("collection_point", "age_group", "gender", "marital_status", "education").
 

Комментарии:

1. Было бы полезно, если бы вы могли предоставить строку кода, с помощью которой вы используете TableOneCreate(). Вам нужно будет использовать starta = collection_point.

2. @jamoreiras, Это сработало! Я использовал: Table_2 Спасибо!!

3. Превосходно! Не могли бы вы, пожалуйста, добавить в сообщение содержимое listVar1 и catVar2?

4. @jamoreiras Да! Однако мне будет очень трудно экспортировать таблицу, если я ее стратифицирую. Я использовал функцию write.table () для сохранения в формате .txt, но я продолжаю получать сообщение об ошибке, даже если оно нормально работало для первой таблицы!

Ответ №1:

Это может быть достигнуто с помощью слоев аргументов.

 >Table_2 <-  CreateTableOne(vars = listVar1, data = df, 
                            factorVars = catVar2, 
                            strata = c("collection_point"))

>print(Table_2)
                    Stratified by collection_point
                     level       0         1        2        3        p    test
  n                              4         4        3        3
  age_group (%)      17-24 years 3 (75.0)  0 (NaN)  0 (NaN)  0 (NaN)   NaN
                     25-55       1 (25.0)  0 (NaN)  0 (NaN)  0 (NaN)
  education (%)      high school 1 (25.0)  0 (NaN)  0 (NaN)  0 (NaN)   NaN
                     university  3 (75.0)  0 (NaN)  0 (NaN)  0 (NaN)
  gender (%)         female      2 (50.0)  0 (NaN)  0 (NaN)  0 (NaN)   NaN
                     male        2 (50.0)  0 (NaN)  0 (NaN)  0 (NaN)
  marital_status (%) partnered   2 (50.0)  0 (NaN)  0 (NaN)  0 (NaN)   NaN
                     single      2 (50.0)  0 (NaN)  0 (NaN)  0 (NaN)